JAVA jtable创建表,添加、修改、删除内容
展开全部
JTable,就是java中的表格,数据是不能直接向JTable中添加的,有点象JFrame中不能直接添加组件一样(面板除外),有一个接口教TableModel,TableModel接口指定了 JTable 用于询问表格式数据模型的方法。DefaultTableModel实现了这个接口,数据先放入DefaultTableModel类中,再将这个类放入JTable中,当然后面这个过程是java自动实现的。DefaultTableModel类中的setDataVector()方法便是把数据放入DefaultTableModel中,setDataVector()方法有两个Vector对象集合,第一个是整张表的数据,第二个是每列的标题,第一个Vector中存放的也是一个Vector对象它代表着表中的一行,里面放的便是具体的每个数据,就是一行中的一列或几列。一下是我自己写的一段用事件接口向表格中添加、删除、修改数据的代码:
MyDataModel类继承了DefaultTableModel。
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.border.CompoundBorder;
public class jtabel extends JFrame { private JTable table;
private JTextField textField_2;
private JTextField textField_1;
private JTextField textField;
private MyDataModel mdm;
private Vector rows;
int ii;
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
jtabel frame = new jtabel();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Create the frame
*/
public jtabel() {
super();
getContentPane().setLayout(null);
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBorder(new CompoundBorder(null, new BevelBorder(BevelBorder.LOWERED)));
panel.setBounds(0, 0, 492, 182);
getContentPane().add(panel); textField = new JTextField();
textField.setBounds(240, 7, 114, 20);
panel.add(textField); textField_1 = new JTextField();
textField_1.setBounds(240, 55, 114, 20);
panel.add(textField_1); textField_2 = new JTextField();
textField_2.setBounds(240, 104, 114, 20);
panel.add(textField_2);
final Vector<String> columnNames = new Vector<String>();//创建表格中每列的标题,将它放在一个vector集合中
columnNames.add("姓名");//添加信息
columnNames.add("性别");
columnNames.add("年龄");
mdm = new MyDataModel();//创建MyDataModel模型对象
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Vector<String> columns = new Vector<String>();//创建列,其实就是一行完整的信息
columns.add(textField.getText());//添加信息
columns.add(textField_1.getText());
columns.add(textField_2.getText());
rows = ((MyDataModel)table.getModel()).getDataVector(); //先取出模型中的信息,再加如新的行,就是说rows代表整个数据
rows.add(columns); //取出模型中的每行的信息:table->model->vector,因此有类型转换
mdm.setDataVector(rows, columnNames);//将新的整个数据和标题放如MyDataModel模型中
}
});
button.setText("添加");
button.setBounds(86, 149, 99, 23);
panel.add(button); final JLabel label = new JLabel();
label.setText("姓名");
label.setBounds(176, 9, 60, 15);
panel.add(label); final JLabel label_1 = new JLabel();
label_1.setText("性别");
label_1.setBounds(176, 57, 58, 15);
panel.add(label_1); final JLabel label_2 = new JLabel();
label_2.setText("年龄");
label_2.setBounds(176, 106, 60, 15);
panel.add(label_2); final JButton button_1 = new JButton();
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// int i = table.getSelectedRow();//得到所选择表中行的索引。用table中的方法
// mdm.removeRow(i);//使用模型对数据行进行删除。
//实现多行删除
int[] aa = table.getSelectedRows();//得到所选择表中行的索引,存如一个数组中。
int a = aa.length-1;
for(int i = a;i>=0;i--){
mdm.removeRow(aa[i]);
}
}
});
button_1.setText("删除");
button_1.setBounds(214, 149, 99, 23);
panel.add(button_1); final JButton button_2 = new JButton();
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Vector<String> columns = new Vector<String>();//创建列,其实就是一行完整的信息
columns.add(textField.getText());//添加信息
columns.add(textField_1.getText());
columns.add(textField_2.getText());
mdm.removeRow(ii);//删除要修改的行
mdm.insertRow(ii, columns); //插入修改后的行
}
});
button_2.setText("修改");
button_2.setBounds(344, 149, 99, 23);
panel.add(button_2); final JPanel panel_1 = new JPanel();
panel_1.setLayout(null);
panel_1.setBorder(new BevelBorder(BevelBorder.LOWERED));
panel_1.setBounds(0, 188, 492, 153);
getContentPane().add(panel_1); final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 10, 472, 133);
panel_1.add(scrollPane); table = new JTable();
table.setModel(mdm);//设置table的模型类型
table.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent arg0) {} public void mouseEntered(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) {} public void mousePressed(MouseEvent arg0) {
// TODO 自动生成方法存根
ii = table.getSelectedRow();//得到所选择表中行的索引。用table中的方法
String[] j = new String[3];
for(int n = 0;n<j.length;n++){
j[n] = (String)mdm.getValueAt(ii,n);//得到表格中每个单元格的值
}
//将所选择的值在三个文本框中显示出来
textField.setText(j[0]);
textField_1.setText(j[1]);
textField_2.setText(j[2]);
} public void mouseReleased(MouseEvent arg0) {}
});
scrollPane.setViewportView(table);
//
}}
MyDataModel类继承了DefaultTableModel。
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.border.CompoundBorder;
public class jtabel extends JFrame { private JTable table;
private JTextField textField_2;
private JTextField textField_1;
private JTextField textField;
private MyDataModel mdm;
private Vector rows;
int ii;
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
jtabel frame = new jtabel();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Create the frame
*/
public jtabel() {
super();
getContentPane().setLayout(null);
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBorder(new CompoundBorder(null, new BevelBorder(BevelBorder.LOWERED)));
panel.setBounds(0, 0, 492, 182);
getContentPane().add(panel); textField = new JTextField();
textField.setBounds(240, 7, 114, 20);
panel.add(textField); textField_1 = new JTextField();
textField_1.setBounds(240, 55, 114, 20);
panel.add(textField_1); textField_2 = new JTextField();
textField_2.setBounds(240, 104, 114, 20);
panel.add(textField_2);
final Vector<String> columnNames = new Vector<String>();//创建表格中每列的标题,将它放在一个vector集合中
columnNames.add("姓名");//添加信息
columnNames.add("性别");
columnNames.add("年龄");
mdm = new MyDataModel();//创建MyDataModel模型对象
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Vector<String> columns = new Vector<String>();//创建列,其实就是一行完整的信息
columns.add(textField.getText());//添加信息
columns.add(textField_1.getText());
columns.add(textField_2.getText());
rows = ((MyDataModel)table.getModel()).getDataVector(); //先取出模型中的信息,再加如新的行,就是说rows代表整个数据
rows.add(columns); //取出模型中的每行的信息:table->model->vector,因此有类型转换
mdm.setDataVector(rows, columnNames);//将新的整个数据和标题放如MyDataModel模型中
}
});
button.setText("添加");
button.setBounds(86, 149, 99, 23);
panel.add(button); final JLabel label = new JLabel();
label.setText("姓名");
label.setBounds(176, 9, 60, 15);
panel.add(label); final JLabel label_1 = new JLabel();
label_1.setText("性别");
label_1.setBounds(176, 57, 58, 15);
panel.add(label_1); final JLabel label_2 = new JLabel();
label_2.setText("年龄");
label_2.setBounds(176, 106, 60, 15);
panel.add(label_2); final JButton button_1 = new JButton();
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// int i = table.getSelectedRow();//得到所选择表中行的索引。用table中的方法
// mdm.removeRow(i);//使用模型对数据行进行删除。
//实现多行删除
int[] aa = table.getSelectedRows();//得到所选择表中行的索引,存如一个数组中。
int a = aa.length-1;
for(int i = a;i>=0;i--){
mdm.removeRow(aa[i]);
}
}
});
button_1.setText("删除");
button_1.setBounds(214, 149, 99, 23);
panel.add(button_1); final JButton button_2 = new JButton();
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Vector<String> columns = new Vector<String>();//创建列,其实就是一行完整的信息
columns.add(textField.getText());//添加信息
columns.add(textField_1.getText());
columns.add(textField_2.getText());
mdm.removeRow(ii);//删除要修改的行
mdm.insertRow(ii, columns); //插入修改后的行
}
});
button_2.setText("修改");
button_2.setBounds(344, 149, 99, 23);
panel.add(button_2); final JPanel panel_1 = new JPanel();
panel_1.setLayout(null);
panel_1.setBorder(new BevelBorder(BevelBorder.LOWERED));
panel_1.setBounds(0, 188, 492, 153);
getContentPane().add(panel_1); final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 10, 472, 133);
panel_1.add(scrollPane); table = new JTable();
table.setModel(mdm);//设置table的模型类型
table.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent arg0) {} public void mouseEntered(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) {} public void mousePressed(MouseEvent arg0) {
// TODO 自动生成方法存根
ii = table.getSelectedRow();//得到所选择表中行的索引。用table中的方法
String[] j = new String[3];
for(int n = 0;n<j.length;n++){
j[n] = (String)mdm.getValueAt(ii,n);//得到表格中每个单元格的值
}
//将所选择的值在三个文本框中显示出来
textField.setText(j[0]);
textField_1.setText(j[1]);
textField_2.setText(j[2]);
} public void mouseReleased(MouseEvent arg0) {}
});
scrollPane.setViewportView(table);
//
}}
追问
我已经创建下了jtable,我要的是和access连接,创建表,添加、修改、删除内容 。。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询