Java Swing JTable(上)

简介: Java Swing JTable(上)

1 简介

JTable用于显示和编辑常规的二维单元格表。有关面向任务的文档和使用JTable的示例,请参见Java教程中的如何使用表。

JTable具有许多功能,可以自定义其呈现和编辑功能,但是为这些功能提供了默认设置,因此可以轻松设置简单的表。例如,要建立一个包含10行10列数字的表:

TableModel dataModel = new AbstractTableModel(){
Public int getColumnCount(){返回10; }
Public int getRowCount(){返回10;}
Public Object getValueAt(int row,int col){返回新的Integer(row * col); }
};
JTable表=新的JTable(dataModel);
JScrollPane scrollpane =新的JScrollPane(table);

JTable通常放置在JScrollPane内部。默认情况下,JTable将调整其宽度,从而不需要水平滚动条。要允许水平滚动条,请使用AUTO_RESIZE_OFF调用setAutoResizeMode(int)。请注意,如果希望在独立视图中(在JScrollPane外部)使用JTable并希望显示标头,则可以使用getTableHeader()获取它并单独显示它。


要启用行的排序和过滤,请使用RowSorter。您可以通过以下两种方式之一设置行排序器:


直接设置RowSorter。例如:table.setRowSorter(new TableRowSorter(model))。

将autoCreateRowSorter属性设置为true,以便JTable为您创建RowSorter。例如:setAutoCreateRowSorter(true)。


在设计使用JTable的应用程序时,值得密切注意将代表表数据的数据结构。


DefaultTableModel是一个模型实现,它使用对象矢量向量存储单元格值。除了将数据从应用程序复制到DefaultTableModel之外,还可以将数据包装在TableModel接口的方法中,以便可以将数据直接传递到JTable,如上例所示。由于模型可以自由选择最适合数据的内部表示形式,因此通常可以提高应用程序的效率。


确定是使用AbstractTableModel还是DefaultTableModel的一个很好的经验法则是


将AbstractTableModel用作创建子类的基类

而在不需要子类化时使用DefaultTableModel

源分发的演示区域中的“ TableExample”目录提供了一些JTable使用情况的完整示例,涵盖了如何使用JTable提供从数据库获取的数据的可编辑视图以及如何修改显示中的列。使用专门的渲染器和编辑器。


JTable仅使用整数来引用它显示的模型的行和列。 JTable只是采用表格形式的单元格范围,并在绘制过程中使用getValueAt(int,int)从模型中检索值。重要的是要记住,由各种JTable方法返回的列和行索引是根据JTable(视图)而言的,不一定与模型使用的索引相同。


默认情况下,列可能会在JTable中重新排列,以使视图的列以与模型中的列不同的顺序出现。这一点根本不影响模型的实现:对列进行重新排序时,JTable在内部维护列的新顺序并在查询模型之前转换其列索引。


因此,在编写TableModel时,不必侦听列重新排序事件,因为无论视图中发生什么,都将在其自身的坐标系中查询模型。在示例区域中,展示了一种排序算法的演示,该算法正是使用此技术来插入另一个坐标系,在该坐标系中行的顺序发生了变化,而不是列的顺序发生了变化。


同样,使用RowSorter提供的排序和筛选功能时,底层的TableModel不需要知道如何进行排序,而是由RowSorter进行处理。当将JTable的基于行的方法与基础TableModel一起使用时,必须进行坐标转换。所有基于JTables行的方法都是基于RowSorter的,不一定与基础TableModel的相同。例如,选择始终是根据JTable进行的,因此,在使用RowSorter时,您将需要使用convertRowIndexToView或convertRowIndexToModel进行转换。下面显示了如何将JTable的坐标转换为基础模型的坐标:


Int []选择= table.getSelectedRows();

For(int i = 0; i selection.length; i ++){

Selection [i] = table.convertRowIndexToModel(selection [i]);

}

//现在根据基础TableModel进行选择


默认情况下,如果启用了排序,则JTable将根据排序模型保留选择和可变行高。例如,如果第0行


JTable,表格。用来显示和编辑二维表。

添加表格到容器中有两种方式:


添加到普通的中间容器中,此时添加的jTable只是表格的行内容,表头(jTable.getTableHeader())需要额外单独添加。此添加方式适合表格行数确定,数据量较小,能一次性显示完的表格;

添加到JScrollPane滚动容器中,此添加方式不需要额外添加表头,jTable添加到jScrollPane中后,表头自动添加到滚动容器的顶部,并支持行内容的滚动(滚动行内容时,表头会始终在顶部显示)。

构造方法

创建空表格,后续再添加相应数据

JTable()

创建指定行列数的空表格,表头名称默认使用大写字母(A, B, C …)依次表示

JTable(int numRows, int numColumns)


创建表格,指定 表格行数据 和 表头名称

JTable(Object[][] rowData, Object[] columnNames)


使用表格模型创建表格

JTable(TableModel dm)


JTable 字体 和 网格 颜色设置:


// 设置内容字体

void setFont(Font font)


// 设置字体颜色

void setForeground(Color fg)


// 设置被选中的行前景(被选中时字体的颜色)

void setSelectionForeground(Color selectionForeground)


// 设置被选中的行背景

void setSelectionBackground(Color selectionBackground)


// 设置网格颜色

void setGridColor(Color gridColor)


// 设置是否显示网格

void setShowGrid(boolean showGrid)


// 水平方向网格线是否显示

void setShowHorizontalLines(boolean showHorizontalLines)


// 竖直方向网格线是否显示

void setShowVerticalLines(boolean showVerticalLines)

JTable 表头 设置:


// 获取表头

JTableHeader jTableHeader = jTable.getTableHeader();


// 设置表头名称字体样式

jTableHeader.setFont(Font font);


// 设置表头名称字体颜色

jTableHeader.setForeground(Color fg);


// 设置用户是否可以通过在头间拖动来调整各列的大小。

jTableHeader.setResizingAllowed(boolean resizingAllowed);


// 设置用户是否可以拖动列头,以重新排序各列。

jTableHeader.setReorderingAllowed(boolean reorderingAllowed);


目录
相关文章
|
4月前
|
安全 Java API
|
4月前
|
SQL Java 数据库连接
【Java】Java Swing 图书管借阅管理系统(源码+论文)【独一无二】
【Java】Java Swing 图书管借阅管理系统(源码+论文)【独一无二】
220 0
|
4月前
|
存储 数据可视化 Java
【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
|
6月前
|
Java 数据安全/隐私保护
利用Java图形化界面组件Swing写一个简易的登录界面
利用Java图形化界面组件Swing写一个简易的登录界面
88 1
|
6月前
|
Java Windows
基于java Swing编写扫雷游戏设计实现(已调试)
基于java Swing编写扫雷游戏设计实现(已调试)
84 1
|
6月前
|
Java
Java Swing模拟水波纹扩散效果动画
Java Swing模拟水波纹扩散效果动画
60 6
|
6月前
|
Java
JAVA Swing自定义JScorllPanel
JAVA Swing自定义JScorllPanel
40 1
|
6月前
|
前端开发 Java UED
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
|
6月前
|
存储 设计模式 前端开发
[笔记] 疯狂JAVA讲义(第3版)第12章 Swing编程
[笔记] 疯狂JAVA讲义(第3版)第12章 Swing编程
|
6月前
|
Java
Java Swing 层次面板(JLayeredPanel) Demo
Java Swing 层次面板(JLayeredPanel) Demo
45 0