⑴ 谁能给个java的小例子,实现swing调用sql的表,并能进行增删改查操作。
LZ要得是代码,就给楼主代码嘛,对于刚学java的人来说肯定对API看得不是很明白,要有比较明确的例子才可以更好的去理解每一个方法,对于楼主的问题,我想说的,首先你要有一个很明确的思路,首先你要写一个DefaultTableModel,这个model是决定你如何显示这些信息的,比如说,第一行显示姓名,然后显示性别。等等。然后从数据库里获得数据,然后传入到这个model中。
其次在你的swing中定义一个table,然后实例化你定义的这个model,然后用table.setMode(DefaultTableModel),把你实例化的那个model传入到table中,这样就会在tabale中显示了你要的结果,至于你说要与数据库连接操纵,这里你就需要加入相关的鼠标listener了,在这个例子中,我给你加入了删除和修改两个操作,就是当对这表格点击鼠标的时候,会出现相应的选择。这你需要用到JPopupMenu, 和JPopupMenu的元素JMenuItem了
首先给你tablemodel的类:
//这个类定义了你如何在表格中显示数据和如何获得表格中的数据,需要把二维数组传入这个类,所以在构造函数中传入了二维数组
public class FriendTableModel extends DefaultTableModel {
private String[] columns = {"学号","姓名","性别","年龄","邮箱"};
private Object a[][];
public FriendTableModel(Object [][] a) {
this.a=a;
}
public Object getUserAt(int rowIndex)
{
Object[] u = a[rowIndex];
return u;
}
public void removeRow(int row) {
a[row]=null;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object[] u = a[rowIndex];
switch(columnIndex) {
case 0:
return u[0];
case 1:
return u[1];
case 2:
return u[2];
case 3:
return u[3];
case 4:
return u[4];
default:
return "";
}
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public int getRowCount() {
if (a==null) return 0;
return a.length;
}
@Override
public boolean isCellEditable(int r, int c) {
return false;
}
@Override
public String getColumnName(int columnIndex) {
return columns[columnIndex];
}
}
然后给你主类,这个类中包含了与数据连接,把数据转换二维数组,定义各个操作的listener,等
public class DataFrame extends JFrame implements ActionListener
{
public static void main(String args[])
{
new DataFrame();
}
Connection con;
Statement stmt;
ResultSet rs;
Object a[][]; //这里的a[][]就是一个i行j列的表,用来显示数据库中数据用的
Object b[]; //从tablemode返回的一行数据, 当你修改数时,向数据库更新的时候,数据从这个对象中获得;
int row;//你修改或者要删除的行
int i=0; //输据的条数
JTable jTable = null;//用来显示表格
JPopupMenu jPopupMenu;//用来显示你对表格的操作
private JMenuItem delete; //删除操作
private JMenuItem upload;//修改操作
Object header[]={"学号","姓名","性别","年龄","邮箱"};//e是一个j列的表头,用来存储字段名称的,比如说上面的"学号","姓名"等字符串
DataFrame()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{
System.out.println("Error:"+e);
}
try{
con=DriverManager.getConnection("jdbc:odbc:mySql","sa","123");
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery("select * from student");
while(rs.next())//把数据库数据写入二维数组
{
a[i][0]=rs.getInt(1);
a[i][1]=rs.getString(2);
a[i][2]=rs.getString(3);
a[i][3]=rs.getInt(4);
a[i][4]=rs.getString(5);
i++;
}
}
catch(SQLException e)
{
System.out.println("SqlError:"+e);
}
jTable = new JTable();
jTable.addMouseListener(new inMouseEven()); //给鼠标定义事件,就是你点击鼠标的时候,会发生的事情
jTable.setShowGrid(false);
jPopupMenu = new JPopupMenu();
delete = new JMenuItem();
delete.setText("删除");
delete.addMouseListener(new Delete_mouseAdapter());//给点击删除时增加事件
upload = new JMenuItem();
upload.setText("修改");
upload.addMouseListener(new Uoload_mouseAdapter());//给点击更新时增加事件
jPopupMenu.add(delete);
jPopupMenu.add(upload);
FriendTableModel ftm = new FriendTableModel(a); //实例化tablemodel,把二维数组传进去
if (ftm.getRowCount() > 0) {
jTable.setModel(ftm);//把Tablemodel传入table中
}
Container con=getContentPane();
getContentPane().add(new JScrollPane(jTable),BorderLayout.CENTER);
setSize(400,300);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
setVisible(true);
validate();
}
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
//当你点击表格中的一行,出现选项,让你选择具体操作,此处是点击鼠标事件的具体代码
private class inMouseEven extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() < 1) {
return;
}
row = jTable.getSelectedRow(); //返回你点击的行数
if (row >= 0) {
FriendTableModel ftm =(FriendTableModel) jTable.getModel();
b= ftm.getUserAt(row ); //返回此行的数据
jPopupMenu.show(DataFrame.this, e.getX() + 160, e.getY() + 75);//出现操作选项
}
}
}
//删除操作的listenr,对应的code
private class Delete_mouseAdapter extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
try {
String sql = "delete from **where id = " + b[0]; //此处b[]是上面当你点击鼠标是返回的那一行数据,b[]中对应的是表格中一行数据。
stmt.executeQuery(sql);
FriendTableModel ftm =(FriendTableModel) jTable.getModel();
ftm.removeRows(0, row );
jTable.updateUI();
} catch (SQLException ex) {
Logger.getLogger(DataFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
//更新操作对应的code
private class Uoload_mouseAdapter extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
String sql ="UPDATE Student SET Address = %s, City = %s WHERE id = %s" %b[1],b[2],b[0]...//这里sql自己写,就是更新所有的数据,新数据从b[...]中获得
stmt.executeQuery(sql);
}
}
}
其中一些sql语句没有给你写出,这个你照着你的数据库写,还有数据库的链接你需要改一下,上面的代码没有经过测试,因为我没有链接数据库,但是整体思路就应该是这样,对应你的具体要求,修改代码,我想应该可以运行起来的,你需要去理解这些代码,然后写出sql语句,给出正确的数据库配置,修改其中可能的错误。
所有代码都是亲手写的,希望对刚接触java的你有用。
如果你从中得到帮助,记得肯定我的劳动,给我分哦。
⑵ java中jatable连接数据库步骤及其获取数据方法
以下是一个小程序,参考下
import javax.swing.*;
import javax.swing.table.JTableHeader;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class Test extends JFrame{
// 定义组件
private JScrollPane scpDemo;
private JTableHeader jth;
private JTable tabDemo;
private JButton btnShow;
// 构造方法
public Test(){
// 窗体的相关属性的定义
super("JTable数据绑定示例");
this.setSize(330,400);
this.setLayout(null);
this.setLocation(100,50);
// 创建组件
this.scpDemo = new JScrollPane();
this.scpDemo.setBounds(10,50,300,270);
this.btnShow = new JButton("显示数据");
this.btnShow.setBounds(10,10,300,30);
// 给按钮注册监听
this.btnShow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
btnShow_ActionPerformed(ae);
}
});
// 将组件加入到窗体中
add(this.scpDemo);
add(this.btnShow);
// 显示窗体
this.setVisible(true);
}
// 点击按钮时的事件处理
public void btnShow_ActionPerformed(ActionEvent ae){
// 以下是连接数据源和显示数据的具体处理方法,请注意下
try{
// 获得连接
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:localServer","sa","");
// 建立查询条件
String sql = "select * from localServer";
PreparedStatement pstm = conn.prepareStatement(sql);
// 执行查询
ResultSet rs = pstm.executeQuery();
// 计算有多少条记录
int count = 0;
while(rs.next()){
count++;
}
rs = pstm.executeQuery();
// 将查询获得的记录数据,转换成适合生成JTable的数据形式
Object[][] info = new Object[count][4];
count = 0;
while(rs.next()){
info[count][0] = Integer.valueOf( rs.getInt("id"));
info[count][1] = rs.getString("name");
info[count][2] = Integer.valueOf( rs.getInt("age") );
info[count][3] = rs.getString("sex");
count++;
}
// 定义表头
String[] title = {"学号","姓名","年龄","性别"};
// 创建JTable
this.tabDemo = new JTable(info,title);
// 显示表头
this.jth = this.tabDemo.getTableHeader();
// 将JTable加入到带滚动条的面板中
this.scpDemo.getViewport().add(tabDemo);
}catch(ClassNotFoundException cnfe){
JOptionPane.showMessageDialog(null,"数据源错误","错误",JOptionPane.ERROR_MESSAGE);
}catch(SQLException sqle){
JOptionPane.showMessageDialog(null,"数据操作错误","错误",JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args){
new Test();
}
}
⑶ 谁能详细介绍一下java swing里的JTable JTree是怎样用的以及他们的方法!
Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级( light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。
Swing采用了一种MVC的设计范式,即"模型-视图-控制"(Model-View-Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。
在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本机相关的外观。Swing使得程序在一个平台上运行时能够有不同的外观。用户可以选择自己习惯的外观。
7.1.2 Swing的类层次结构
在javax.swing包中,定义了两种类型的组件:顶层容器(JFrame,JApplet,JDialog和JWindow)和轻量级组件。Swing组件都是AWT的Container类的直接子类和间接子类。
java.awt.Component
-java.awt.Container
-java.awt.Window
-java.awt.Frame-javax.swing.JFrame
-javax.Dialog-javax.swing.JDialog
-javax.swing.JWindow
-java.awt.Applet-javax.swing.JApplet
-javax.swing.Box
-javax.swing.Jcomponet
swing包是Swing提供的最大包,它包含将近100个类和25个接口,几乎所有的Swing组件都在swing包中,只有JtableHeader和 JtextComponent是例外,它们分别在swing.table和swing.text中。
swing.border包中定义了事件和事件监听器类,与AWT的event包类似。它们都包括事件类和监听器接口。
swing.pending包包含了没有完全实现的Swing组件。
swing.table包中主要包括了表格组建(JTable)的支持类。
swing.tree同样是JTree的支持类。
swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用于显示和编辑文档的包。