论坛首页 Java企业应用论坛

javax.swing 类 JTable

浏览 5794 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-11   最后修改:2009-03-11
javax.swing
类 JTable
java.lang.Object
  java.awt.Component
      java.awt.Container
          javax.swing.JComponent
              javax.swing.JTable
public class JTableextends JComponentimplements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, AccessibleJTable 用来显示和编辑规则的二维单元表。有关面向任务的文档和使用 JTable 的示例,请参阅《The Java Tutorial》中的 How to Use Tables 一节。

JTable 有很多用来自定义其呈现和编辑的设施,同时提供了这些功能的默认设置,从而可轻松地设置简单表。例如,要设置一个 10 行 10 列的表:


      TableModel dataModel = new AbstractTableModel() {
          public int getColumnCount() { return 10; }
          public int getRowCount() { return 10;}
          public Object getValueAt(int row, int col) { return new Integer(row*col); }
      };
      JTable table = new JTable(dataModel);
      JScrollPane scrollpane = new JScrollPane(table);
注意,如果要在单独的视图中(在 JScrollPane 外)使用 JTable 并显示表标题,则可以使用 getTableHeader() 获取并单独显示它。

设计使用 JTable 的应用程序时,要严格注意用来表示表数据的数据结构。DefaultTableModel 是一个模型实现,它使用一个 Vector 来存储所有单元格的值。该 Vector 由包含多个 Object 的 Vector 组成。除了将数据从应用程序复制到 DefaultTableModel 中之外,还可以 TableModel 接口的方法来包装数据,这样可将数据直接传递到 JTable,如以上示例所示。这通常可以提高应用程序的效率,因为模型可以自由选择最适合数据的内部表示形式。在决定使用 AbstractTableModel 还是使用 DefaultTableModel 方面有一个好的实践经验,即在创建子类时使用 AbstractTableModel 作为基类,在不需要创建子类时则使用 DefaultTableModel。

在发行的源代码演示部分中的 "TableExample" 目录内给出了许多 JTable 用法的完整示例,包括如何使用 JTable 来提供一个可编辑的数据视图(数据来自数据库),以及如何修改正显示的列以使用特殊的渲染器和编辑器。

JTable 使用惟一的整数来引用它所显示的模型的行和列。JTable 只是采用表格的单元格范围,并在绘制时使用 getValueAt(int, int) 从模型中检索值。

默认情况下,在 JTable 中对列进行重新安排,这样在视图中列的出现顺序与模型中列的顺序不同。但这根本不影响模型的实现:当列重新排列时,JTable 在内部保持列的新顺序,并在查询模型前转换其列的索引。

因此编写 TableModel 时,不必侦听列的重排事件,因为将在模型自己的坐标系统中查询它,而不管视图中发生了什么情况。在示例部分中有一个排序算法的演示,此演示正是使用了此技术在另一个坐标系统中进行排序,其中更改行的顺序,而不更改列的顺序。
   发表时间:2009-03-12  
定制JTable能单独算一个项目了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics