表格是最常用的数据统计形式之一,在日常生活中经常需要表格来统计数据。在 Java Swing 中由JTable类实现表格。
一,创建表格在 JTable 类中除了默认的构造方法外,还提供了利用指定表格列名数组和表格数据数组创建表格的构造方法。
JTable table = new JTable(Object[][] rowData, Object[] columnNames);
rowData:封装表格数据的数组。
columnNames:封装表格列名的数组。
在使用表格时,通常将其添加到滚动面板中,然后将滚动面板添加到相应的位置。
利用构造方法“JTable table = new JTable(Object[][] rowData, Object[] columnNames)”创建一个表格,完整代码如下:
package study.czm;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class Study {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setTitle("表格组件");
jf.setSize(240, 150);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
Container c = jf.getContentPane();
String[] columnNames = { "姓名", "年龄" };// 定义表格列名数组
String[][] rowData = { { "小明", "12" }, { "小红", "13" }, { "小绿", "22" }, { "小刚", "92" }, { "小西", "17" } };// 定义表格数据数组
JTable table = new JTable(rowData, columnNames);// 创建指定列名和数据的表格
JScrollPane scrollPane = new JScrollPane(table);// 创建显示表格的滚动面板
c.add(scrollPane, BorderLayout.CENTER);
jf.setVisible(true);
}
}
运行效果:
表格创建完成后,还需要对其进行一系列的定义,以便适用于具体的情况。
JTable中用来定义表格的常用方法
方法 | 说明 |
---|---|
setRowHeight(int rowHeight) | 设置表格的行高,默认为16像素 |
setRowSelectionAllowed(boolean sa) | 设置是否允许选中表格行,默认为允许选中,设置为false表示不允许选中 |
setSelectionMode(int sm) | 设置表格行的选择模式 |
setSelectionBackground(Color bc) | 设置表格选中行的背景色 |
setSelectionForeground(Color fc) | 设置表格选中行的前景色(通常情况下为设置文字颜色) |
setAutoResizeMode(int mode) | 设置表格的自动调整模式 |
在利用 setSelectionMode(int sm) 方法设置表格的选择模式时,它的模式可以从 ListSelectionModel 类的静态常量中选择。
ListSelectionModel 类中用来设置选择模式的静态常量
静态常量 | 代表模式 |
---|---|
SINGLE_SELECTIOM | 只允许选中一个 |
SINGLE_INTERVAL_SELECTION | 允许连续选择多个 |
MULTIPLE_INTERVAL_SELECTION | 可以随意选择多个 |
在利用 setAutoResizeMode(int mode) 方法设置表格的自动调整模式时,它可以在 JTable 类的静态常量中选择。
JTable 类中用来设置自动调整模式的静态常量
静态常量 | 自动调整模式 |
---|---|
AUTO_RESIZE_OFF | 关闭自动调整使用水平滚动条是的必要设置 |
AUTO_RESIZE_NEXT_COLUMN | 只调整其下一列的宽度 |
AUTO_RESIZE_SUBSEQUENT_COLUMNS | 按比例调整其后的所有宽度,为默认设置 |
AUTO_RESIZE_LAST_COLUMN | 只调整最后一列的宽度 |
AUTO_RESIZE_ALL_COLUMNS | 按比例调整表格所有列的宽度 |
在编写应用表格的程序时,经常需要获得表格的一些信息,如表格拥有的行数和列数。
getRowCount():获得表格拥有的行数,返回值为 int 型。
getColumnCount():获得表格拥有的列数,返回值为 int 型。
getColumnName(int column):获得位于指定索引位置的列的名称,返回值为 String 型。
JTable 类中经常用来操纵表格选中行的方法
方法 | 说明 |
---|---|
setRowSelectionInterval(int from, int to) | 选中行索引从 from 到 to 的所有行(包括 from 和 to ) |
addRowSelectionInterval(int from, int to) | 将行索引从 from 到 to 的所有行追加为表格的选中行 |
isRowSelected(int row) | 查看行索引为row的行是否被选中 |
selectAll() | 选中表格中的想所有行 |
clearSelection() | 取消所有选中行的选择状态 |
getSelectedRowCount() | 获得表格中被选中行的数量,返回值为 int 型,如果没有被选中行则返回-1 |
getSelectedRow() | 获得被选中行中最小的行索引值,返回值为 int 型,如果没有被选中行则返回-1 |
getSelectedRows() | 获得所有被选中行的索引值,返回值为 int 型数组 |
注意:表格中的索引值与数组的索引值一样,都是从0开始的,第一行的索引值为0,第二行为1。
四,表格模型与表格 1,利用表格模型创建表格利用表格模型创建一个表格,代码如下:
package study.czm;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Study {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setTitle("表格组件");
jf.setSize(240, 150);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
Container c = jf.getContentPane();
String[] columnNames = { "姓名", "年龄" };// 定义表格列名数组
String[][] rowData = { { "小明", "12" }, { "小红", "13" }, { "小绿", "22" }, { "小刚", "92" }, { "小西", "17" } };// 定义表格数据数组
DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames);// 创建指定表格列名和表格数据的表格模型
JTable table = new JTable(tableModel);// 创建指定表格模型的表格
JScrollPane scrollPane = new JScrollPane(table);// 创建显示表格的滚动面板
c.add(scrollPane, BorderLayout.CENTER);
jf.setVisible(true);
}
}
运行效果:
维护表格模型的主要方法:
方法 | 说明 |
---|---|
addRow(Object[] rowData) | 将由数组封装的数据的数据添加到表格模型的尾部 |
addRow(Vector rowData) | 将由向量封装的数据添加到表格模型的尾部 |
insertRow(int row, Object[] rowData) | 将由数组封装的数据添加到表格模型的指定索引位置 |
insertRow(int row, Vector rowData) | 将由向量封装的数据添加到表格模型的指定索引位置 |
setValueAt(Object aValue, int row, int column) | 修改表格模型中指定单元格的数据,aValue为修改后的值,row为单元格所在行索引,column为单元格所在列索引 |
getValueAt(int row, int column) | 获取指定单元格的值,返回值为Object型 |
removeRow(int row) | 删除指定单元格的数据,row为需要删除行的索引 |