swing表格的DefaultTableModel
不仅用户可以扩展AbstractTableModel抽象类,Swing本身也为AbstractTableModel提供了一个DefaultTableModel实现类,程序可以通过使用DefaultTableModel实现类来创建JTable对象。通过DefaultTableModel对象创建JTable对象后,就可以调用它提供的方法来添加数据行、插入数据行 、删除数据行和移动数据行。DefaultTableModel提供了如下几个方法来控制数据行操作:
| 方法 | 作用 |
|---|---|
| addColumn(Object columnName)/addColumn(Object columnName, Object[] columnData) | 添加一列 |
| addRow(Object[] rowData) | 添加一行 |
| insertRow(int row, Object[] rowData) | 指定位置处插入一行 |
| removeRow(int row) | 删除一行 |
| moveRow(int start, int end, int to) | 移动指定范围内的数据行 |
DefaultTableModel提供了非常多的API,使用起来非常方便
swing表格的DefaultTableModel_练习
xxxxxxxxxxpackage ch30;
import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Vector;
public class a_34_0swing_表格_DefaultTableModel {
JFrame jf = new JFrame("TableModel演示");
//创建一维数组,存储标题 Object[] titles = {"姓名", "年龄", "性别"}; //创建二维数组,存储数据 Object[][] data = { new Object[]{"张三", 18, "男"}, new Object[]{"李四", 17, "男"}, new Object[]{"小华", 19, "女"}, new Object[]{"小红", 16, "女"}, new Object[]{"王五", 15, "男"}, };
//如何通过Vector集合来创建JTable,如下 private Vector titlesV = new Vector();//存储标题 private Vector<Vector> dataV = new Vector<>();//存储数据
//组装视图 public void init(){ //把写好的一维数组里面的数据放到Vector集合里面 for (int i = 0; i < titles.length; i++) { titlesV.add(titles[i]); } //把写好的二维数组里面的数据放到Vector集合里面 for (int i = 0; i < data.length; i++) { Vector t = new Vector<>(); for (int j = 0; j < data[i].length; j++) { t.add(data[i][j]); } dataV.add(t); }
//JTable jTable = new JTable(dataV,titlesV); //为了方便写按钮事件,我们就不建议使用上面那行的写法创建jTable,而是通过DefaultTableModel来创建jTable DefaultTableModel model = new DefaultTableModel(dataV,titlesV); JTable jTable = new JTable(model);
//创建底部的3个按钮 JButton addRow = new JButton("添加一行"); JButton addColumn = new JButton("添加一列"); JButton deleteRow = new JButton("删除一行");
//当点击"添加一行"按钮时 addRow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //给表格添加一行 model.addRow(new Object[]{"新增行",20,"null",}); } }); //当点击"添加一列"按钮时 addColumn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //给表格添加一列 model.addColumn("新增列"); } }); //当点击"删除一行"按钮时 deleteRow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //获取当前选中的是哪一行 int selectedRow = jTable.getSelectedRow();//返回的是索引 model.removeRow(selectedRow); } });
//组装4个按钮 JPanel panel = new JPanel(); panel.add(addRow); panel.add(addColumn); panel.add(deleteRow);
//把按钮添加到窗口的南部区域 jf.add(panel,BorderLayout.SOUTH); //将表格放到窗口的中间区域 jf.add(new JScrollPane(jTable));
jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) { new a_34_0swing_表格_DefaultTableModel().init(); }
}