失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java图形化界面编程超详细知识点(10)——Swing_表格

Java图形化界面编程超详细知识点(10)——Swing_表格

时间:2024-05-30 11:02:16

相关推荐

Java图形化界面编程超详细知识点(10)——Swing_表格

目录

7 JTable、TableModel实现表格

7.1 创建简单表格

7.2 TableModel

7 JTable、TableModel实现表格

表格也是GUI程序中常用的组件,表格是一个由多行、多列组成的二维显示区。Swing的JTable以及相关类提供了这种表格支持,通过使用JTable以及相关类,程序既可以使用简单的代码创建表格来显示二维数据,也可以开发出功能丰富的表格,还可以为表格定制各种显式外观,编辑特性。

7.1 创建简单表格

使用JTable创建简单表格步骤:

1.创建一个一维数组,存储表格中每一列的标题

2.创建一个二维数组,存储表格中每一行的数据,其中二维数组内部的每个一维数组代表表格中的一行数据

3.根据第一步和第二步创建的一维数组和二维数组,创建JTable对象

4.把JTable添加到其他容器中显示

案例:

使用JTable实现下图效果:

public class SimpleTable {JFrame jf = new JFrame("简单表格");//创建一维数组,存储标题Object[] titles = {"姓名","年龄","性别"};//创建二维数组,存储数据Object[][] data = {{"李清照",29,"女"},{"苏格拉底",56,"男"},{"李白",35,"男"},{"弄玉",18,"女"},{"虎头",2,"男"}};public void init(){//组装视图JTable jTable = new JTable(data,titles);jf.add(new JScrollPane(jTable));jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.pack();jf.setVisible(true);}public static void main(String[] args) {new SimpleTable().init();}}

7.2 TableModel

与JList、JTree类似的是,JTable采用了TableModel来保存表格中的所有状态数据:与ListModel类似的是,TableModel也不强制保存该表格显示的数据。虽然在前面程序中看到的是直接利用一个二维数组来创建JTable对象,但也可以通过TableModel对象来创建表格。

自定义TableModel步骤:

1.自定义类,继承AbstractTableModel抽象类,重写下面方法:

int getColumnCount();返回表格列的数量

int getRowCount();返回表格行的数量

Object getValueAt(int rowIndex,int columnIndex);返回rowIndex行,column列的单元格的值

String getColumnName(int columnIndex);返回columnIndex列的列名称

boolean isCellEditable(int rowIndex,int columnIndex);设置rowIndex行,columnIndex列单元格是否可编辑

2.创建自定义类对象,根据该对象,创建JTable对象

案例:

代码演示:

public class TableModelTest {JFrame jf = new JFrame("TableModel演示");//创建一维数组,存储标题Object[] titles = {"姓名","年龄","性别"};//创建二维数组,存储数据Object[][] data = {{"李清照",29,"女"},{"苏格拉底",56,"男"},{"李白",35,"男"},{"弄玉",18,"女"},{"虎头",2,"男"}};private Vector titlesV = new Vector();//存储标题private Vector<Vector> dataV = new Vector<>();//存储数据public void init(){//组装视图for (int i = 0; i < titles.length; i++) {titlesV.add(titles[i]);}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);}MyTableModel myTableModel = new MyTableModel();//JTable jTable = new JTable(dataV,titlesV);JTable jTable = new JTable(myTableModel);jf.add(new JScrollPane(jTable));JButton btn = new JButton("获取选中行数据");btn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int selectedColumn = jTable.getSelectedColumn();int selectedRow = jTable.getSelectedRow();System.out.println("当前选中行的索引:"+selectedRow);System.out.println("当前选中列的索引:"+selectedColumn);Object value = myTableModel.getValueAt(selectedRow, selectedColumn);System.out.println("当前选中行第一个单元格的内容为:"+value);}});jf.add(btn, BorderLayout.SOUTH);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.pack();jf.setVisible(true);}private class MyTableModel extends AbstractTableModel{@Overridepublic int getRowCount() {return dataV.size();}@Overridepublic int getColumnCount() {return titlesV.size();}@Overridepublic Object getValueAt(int rowIndex, int columnIndex) {return dataV.get(rowIndex).get(columnIndex);}@Overridepublic String getColumnName(int column) {return (String) titlesV.get(column);}@Overridepublic boolean isCellEditable(int rowIndex, int columnIndex) {return false;}}public static void main(String[] args) {new TableModelTest().init();}}

不仅用户可以扩展AbstractTableModel抽象类,Swing本身也为AbstractTableModel提供了一个DefaultTableModel实现类,程序可以通过使用DefaultTableModel实现类来创建JTable对象。通过DefaultTableModel对象创建JTable对象后,就可以调用它提供的方法来添加数据行、插入数据行、删除数据行和移动数据行。DefaultTableModel提供了如下几个方法来控制数据行操作:

addColumn(Object columnName);添加一列

addRow(Object[] rowData);添加一行

insertRow(int row,Object[] rowData);指定位置处插入一行

removeRow(int row);删除一行

moveRow(int start,int end,int to);移动指定范围内的数据行

案例:

public class DefaultTableModelTest {JFrame jf = new JFrame("TableModel演示");//创建一维数组,存储标题Object[] titles = {"姓名","年龄","性别"};//创建二维数组,存储数据Object[][] data = {{"李清照",29,"女"},{"苏格拉底",56,"男"},{"李白",35,"男"},{"弄玉",18,"女"},{"虎头",2,"男"}};private Vector titlesV = new Vector();//存储标题private Vector<Vector> dataV = new Vector<>();//存储数据public void init(){//组装视图for (int i = 0; i < titles.length; i++) {titlesV.add(titles[i]);}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);}//通过DefaultTableModel创建JTableDefaultTableModel model = new DefaultTableModel(dataV,titlesV);JTable jTable = new JTable(model);//创建按钮JButton addRow = new JButton("添加一行");JButton addColum = new JButton("添加一列");JButton deleteRow = new JButton("删除一行");addRow.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//需要给表格添加一行model.addRow(new Object[]{"胡歌",30,"男"});}});deleteRow.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int selectedRow = jTable.getSelectedRow();model.removeRow(selectedRow);}});addColum.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {model.addColumn("职业");}});JPanel panel = new JPanel();panel.add(addRow);panel.add(addColum);panel.add(deleteRow);jf.add(panel, BorderLayout.SOUTH);jf.add(new JScrollPane(jTable));jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.pack();jf.setVisible(true);}public static void main(String[] args) {new DefaultTableModelTest().init();}}

如果觉得《Java图形化界面编程超详细知识点(10)——Swing_表格》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。