Java Swing组件:表格
创始人
2024-11-11 10:05:19
0次

       表格(JTable)是将数据以二维的形式展示给用户,它包括行和列,每一行表示一个对象,例如一个学生,每一列表示对象的一种属性,例如学生的学号、姓名等。表格组件是采用MVC(Model View Controller)模式进行设计,按照MVC的设计理念,JTable类属于视图,对应的数据模型是TableModel接口的实现类,用户可以根据自己的业务逻辑和数据结构来实现TableModel接口。在Swing中,抽象类AbstractTableModel是TableModel接口的一个实现类,它提供了TableModel接口的默认实现。在实际应用中,一般使用默认的数据模型DefaultTableModel来存储和管理表格的数据,该类是AbstractTableModel类的子类,它提供了常见的表格操作,例如,添加、修改、删除表格的数据等。由于表格的结构和功能比较复杂,因此,Swing中使用TableColumnModel接口的实现类来管理表格的列模型,使用ListSelectionModel接口的实现类来管理表格的选择模型。用户可以根据自己的需求来实现TableColumnModel和ListSelectionModel接口,也可以使用默认的列模型DefaultTableColumnModel(该类是TableColumnModel接口的实现类)和默认的选择模型DefaultListSelectionModel(该类是ListSelectionModel接口的实现类)来管理表格中列以及行和列的选择。

       JTable类的常用构造方法如下:

  • JTable():使用默认的数据模型、默认的列模型和默认的选择模型创建表格。
  • JTable(int numRows, int numColumns):使用DefaultTableModel创建具有指定行数和列数的表格。
  • JTable(Object[][] numRows, int numColumns):通过指定的二维组数和列名创建表格。
  • JTable(TableModel dm):通过指定的数据模型、默认的列模型和默认的选择模型创建表格。
  • JTable(TableModel dm, TableColumnModel cm):通过指定的数据模型、指定的列模型和默认的选择模型创建表格。
  • JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm):通过指定的数据模型、指定的列模型和指定的选择模型来创建表格。

       JTable类提供的方法非常多,限于篇幅,在这里只介绍几个常用的方法:

  • int getSelectedRow():返回第一个被选定行的索引,如果未选择任何行,则返回-1。
  • int[] getSelectedRows():返回所有选定行的索引。
  • int getSelectedRowCount():返回所选定行的数量。
  • Object getValueAt(int row,int column):返回指定单元格的值。

       创建表格一般先使用DefaultTableModel类的构造方法创建表格的数据模型,然后使用JTable类的构造方法创建表格并与数据模型进行关联。DefaultTableModel类的主要构造方法如下:

  • DefaultTableModel(Object[][] data, Object[] columnNames):通过指定二维组数和列名创建表格的数据模型。
  • void addRow(Object[] rowData):在数据模型的末尾添加一行。
  • void insertRow(int row, Object[] rowData):在数据模型中插入一行。
  • void setValueAt(Object aValue, int row, int column):设置单元格的对象值。
  • void removeRow(int row):从数据模型中删除一行。

       为了使表格能够对数据进行排序,必须将RowSorter类和JTable进行关联。RowSorter是一个抽象类,它负责将JTable中的数据映射成可排序的数据。在实际应用中,一般使用RowSorter的子类TableRowSorter与JTable进行关联。

【例1】下面程序使用指定的数据模型创建一个具有排序功能的表格,并对表格中的数据进行增加、修改和删除操作,其中,增加和修改功能是通过一个对话框来完成的。

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class JTableDemo extends JFrame{ 	Object[][] data= {};//表格的数据     String columnNames[]= {"课程代码","课程名称","学分","学时"};//表格的列     DefaultTableModel tableModel;//表格的数据模型     JTable table; //表格     JButton addButton=new JButton("增加"); 	JButton editButton=new JButton("修改"); 	JButton deleteButton=new JButton("删除"); 	public JTableDemo() { 		JFrame frame=this; 		setTitle("表格示例"); 		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 		setLocationRelativeTo(null); 		setSize(400,300); 		Container contentPane=this.getContentPane(); 		tableModel=new DefaultTableModel(data,columnNames);//创建数据模型 		table=new JTable(tableModel);//创建表格,关联数据模型 		RowSorter sorter=new TableRowSorter(tableModel);//创建表格行排序 		table.setRowSorter(sorter);//设置表格行排序 		JPanel panel=new JPanel(); 		panel.add(addButton); 		panel.add(editButton); 		panel.add(deleteButton); 		contentPane.add(new JLabel("课程信息"),BorderLayout.NORTH); 		contentPane.add(new JScrollPane(table),BorderLayout.CENTER); 		contentPane.add(panel,BorderLayout.SOUTH); 		//增加按钮注册事件监听器 		addButton.addActionListener(new ActionListener() { 			public void actionPerformed(ActionEvent e) { 				new AddDialog(frame,tableModel,-1); 			} 		}); 		//修改按钮注册事件监听器 		editButton.addActionListener(new ActionListener() { 			public void actionPerformed(ActionEvent e) { 				int row=table.getSelectedRow();//获取被选中的行号 				if(row!=-1) { 					new AddDialog(frame,tableModel,row); 				} 			} 		}); 		//删除按钮注册事件监听器 		deleteButton.addActionListener(new ActionListener() { 			public void actionPerformed(ActionEvent e) { 				int[] rows=table.getSelectedRows();//获取所有被选中的行号 				if(rows.length>0) { 					for(int i=0;i

       运行上述程序,显示结果如图1(a)所示,点击增加按钮弹出如图1(b)所示的对话框,录入课程信息后点击保存按钮,则该课程信息保存到表格中,可以在该对话框中录入多门课程,如图1(c)所示。选择表格中的某一行点击修改按钮后,弹出如图1(d)所示的对话框,在该对话框中可以修改课程信息,点击保存按钮按钮后,会更新表格中该课程的信息。选择表格中的一行或多行课程,点击删除按钮后会从表格中删除这些课程。

(a)

(c)

(b)

(d)

图1. 表格使用示例

相关内容

热门资讯

每日必看!江岸多玩到底能开挂吗... 每日必看!江岸多玩到底能开挂吗(辅助挂),江岸多玩原来真的有辅助挂讲义1、江岸多玩脚本辅助下载、江岸...
玩家交流!颖河竞技怎么开挂(外... 玩家交流!颖河竞技怎么开挂(外挂),颖河竞技好像是有外挂教材一、颖河竞技游戏安装教程牌型概率发牌机制...
最新通报!皮皮四川麻将软件下载... 最新通报!皮皮四川麻将软件下载(辅助挂),皮皮四川麻将果然有辅助挂模块1、操作简单,无需皮皮四川麻将...
一分钟揭秘!52游戏开挂脚本(... 一分钟揭秘!52游戏开挂脚本(透视挂),52游戏切实有透视挂法子52游戏脚本下载中分为三种模型:52...
一分钟快速了解!堆堆乐开挂破解... 一分钟快速了解!堆堆乐开挂破解(外挂),堆堆乐竟然真的有外挂方针1、下载好堆堆乐正确养号方法之后点击...
重大通报!汇城贵州麻将开挂脚本... 重大通报!汇城贵州麻将开挂脚本(开挂),汇城贵州麻将原来真的有开挂法门1、重大通报!汇城贵州麻将开挂...
盘点一款!七色城透视挂件(外挂... 盘点一款!七色城透视挂件(外挂),七色城切实是真的有外挂经验1、全新机制【七色城ai辅助工具激活码】...
今日头条!多多休闲透视软件下载... 今日头条!多多休闲透视软件下载(外挂),多多休闲确实是真的有外挂攻略1、首先打开多多休闲辅助器下载最...
关于!钱柜麻将真的有透视吗(辅... 关于!钱柜麻将真的有透视吗(辅助器),钱柜麻将一贯是有辅助器练习钱柜麻将能透视中分为三种模型:钱柜麻...
今日焦点!河北家乡棋牌辅助工具... 今日焦点!河北家乡棋牌辅助工具(外挂),河北家乡棋牌果然是有外挂手册小薇(辅助器软件下载)致您一封信...