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_练习
xxxxxxxxxx
package 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();
}
}