`

JTable的模型用法

    博客分类:
  • java
阅读更多
       class javax.swing.JTable这个类就代表了Swing的table组件,而且这个类提供了丰富的API来管理table的行为和table的表现形式。JTable直接继承自JComponent。JTable实现了5个接口,它们是:TableModelListener, TableColumnModelListener, ListSelectionListener, CellEditorListener以及Scrollable(实现Scrollable意味着table可以被放入JScrollPane中(It is meant to be pleaced in a JScrollPane))。每个JTable都有3个model,即:TableModel, TableColumnModel, ListSelectionModel。所有的table的数据都被放置在TableModel中,TableModel一般都是一个二维的结构,例如可能是个二维数组,或者是一个    元素是Vector的Vector。同时TableModel的实现还必须指定,这个model中的数据是如何存储的,而且还必须定义如何增加、操作、以及得到这个model的数据的方法。同时,TableModel在指定每个单元格是否可以被编辑,以及表的每列的数据的类型方面同样起着至关重要的作用。数据在TableModel中的位置和数据在JTable中显示的位置并不是直接对应的。实际上数据在TableModel中的位置和数据在JTable中显示的位置,之间的对应关系是通过最下层的TableColumnModel来控制的。

         TableColumnModel是用来管理TableColumn的实例的,每个TableColumn代表的是TableModel的数据中的一个单独列。而TableColumn类则用来负责管理每个具体列在JTable GUI中的实际显示。每个TableColumn都有一个与之相关联的cell renderer, cell editor, table header以及table header的cell renderer。当一个JTable被放入了JScrollPane后,这些table header就被放在了scroll pane的COLUMN_HEADER viewport中,这些table header 可以被拖拽还可以被改变大小,从而我们也就可以对JTable的列重新排序和改变每列的宽度。一个TableColumn的 table header renderer返回一个用来render此列的table header的组件,而TableColumn的cell renderer负责返回一个用来render每个cell的组件。就像JList和JTree的renderer,这些renderer都像是邮戳,它们是不可以交互的。而由cell editor返回的组件则是完全可以交互的。cell renderer是TableCellRenderer的实例,cell editor是TableCellEditor的实例。如果没有显式的指派cell renderer和cell editor,那么根据TableModel的相应的每个列的数据的类型,每个列都会得到默认的cell renderer和cell editor。

        TableColumnModel是用来管理所有的TableColumn之用的,TableColumnModel提供对列的显示顺序,列的选择以及margin size的控制。为了可以支持不同的选择模式,TableColumnModel也维护了一个ListSelectionModel,就像我们在第10章学习的那样,ListSelectionModel允许single,single-interval, multiple-interval selection。而JTable比这更加富有弹性,JTable甚至还提供给我们来自定义对某个行、列甚至单元格的选择。后面我们会学习这个。

        我们可以指定一种resizing策略,这种策略用来指定,当我们resize一个列时,其他的列是如何动作的,我们还可以指定列之间或者行之间的割线是不是显示。我们还可以指定列之间、行之间的margin size,选中的未选中的格子的前景背景色,行的高度,以及每个列的宽度。

        和talbe一起来的有两种事件,它们是TableModelEvent和TableColumnModelEvent,当然其他的java事件对JTable也是同样适用的。比方说,我们可以用MouseListeners来处理鼠标双击事件。ChangeEvents和ListSelectionEvents事件同样也可以用来和TableColumnModel进行交互。

        Note:尽管JTable实现了几个监听器接口,但是JTable除了继承自JComponent的用来注册监听器的方法外,并没有提供任何其他的用来注册监听器的方法。如果想给JTable加上任何监听器以用来捕获上述事件,我们必须首先得到适当的model。

        JTable有好几个构造函数。我们可以用默认的构造函数或者使用带有参数的构造函数,给JTable传递两个Vector分别用来盛放table的数据和table的列名。我们也可以指定行和列的个数来创建一个空的table。我们也可以用一个存放table数据的二维数组和一个存放列的名字的数组来传递给table的构造函数来构造一个table。其他的构造函数则允许我们利用指定的model来建立JTable。对于所有的构造函数来说,下面的事情都是成立的,也就是说,如果我们没有在构造函数中给table指派model,那么JTable将会用JTable的protected方法createDefaultColumnModel(),createDefaultDataModel()和createDefaultSelectionModel()来创建默认的实现。而且对每个TableColumn来说TableColumn的renderer,editor以及TableColumn的JTableHeader如果没有指定model那么也会用createDefaultEditors(),createDefaultRenderers()和createDefaultTableHeader()来创建默认的实现。

        JTable是最复杂的Swing组件之一,追逐JTable的具体实现以及JTable的互动性质确实是个极大的挑战。在开始我们一步步的构造我们的股票表格程序之前,我们先打理通这些细节。这一节的剩余部分我们将会讨论决定JTable的内部机制的这些类和接口



总结:

TableModel的作用

1、  决定某个单元格是否可以编辑

2、  决定每一列的数据的类型

3、  实际存储JTable中的数据

4、  定义如何对JTable中的数据进行操作的方法



TableColumnModel的作用

1、  管理着所有的TableColumn的实例

2、  控制着列在JTable GUI上的显示顺序;JTable是如何被选择的,而且为了控制JTable的选择它还维护了一个ListSelectionModel;margin size



TableColumn的作用

1、  代表了TableModel中的数据的一个单独列

2、  就是数据在JTable GUI上实际的数据显示

3、  每个TableColumn都有四个东西cell renderer, table header renderer, cell editor和一个talbe header。而每个列之所以可以改变宽度以及可以改变显示的位置就是由于我们可以操纵这个这个TableColumn的table header
分享到:
评论

相关推荐

    JAVA中JTable的使用方法

    下面我们将深入探讨`JTable`的使用方法。 1. **`JTable`的基本概念** `JTable`是`javax.swing.JTable`类的实例,它继承自`JComponent`并实现了`TableModelListener`接口。`JTable`的核心在于`TableModel`,它定义...

    JTable常见用法细则.doc

    ### Java中的JTable常见用法详解 #### 一、创建JTable控件的方式 JTable是Swing框架中用于展示表格数据的一个重要组件。通过不同的构造方法,我们可以根据实际需求灵活地创建表格。 1. **无参数构造**: - **...

    Java Swing高级空件JTable的用法

    Java Swing高级空件JTable的用法 Java Swing中的JTable组件是用于显示和编辑数据的表格控件。它是Swing中最复杂和强大的组件之一,具有许多高级功能和灵活的配置选项。下面将详细介绍JTable的用法和相关知识点。 1...

    JTable数据模型设置与数据库综合

    `JTable`需要一个数据模型来提供数据,通常使用`AbstractTableModel`作为基础类来构建具体的数据模型。 #### 三、数据模型(TableModel)实现 本案例中的`TableModel`实现了`AbstractTableModel`接口,并且添加了对...

    Java中JTable的用法.doc

    这篇文章将带你深入了解JTable的使用方法。 首先,JTable的核心在于它能够动态地展示数据,这通常是一个二维数组,如`Object[][] data`。在这个例子中,`data`包含了产品名、箱数和价格等信息。另外,`String[] ...

    理解jtable 用法

    在Java编程中,`JTable`是Swing组件库中的一个重要组成部分,用于创建和展示二维数据的表格。它常用于GUI应用程序中,...理解其构造函数、基本用法以及与数据模型的交互,将有助于构建更加复杂和功能丰富的用户界面。

    学会JTable的使用

    总结,学习`JTable`的关键在于理解其数据模型,掌握如何创建和操作`TableModel`,以及如何定制表格的外观和行为。通过实践和研究提供的示例代码,你将能够熟练地在Java Swing应用中使用`JTable`来构建功能丰富的用户...

    jTable的使用

    ### jTable的高级用法 1. **自定义模型**:`DefaultTableModel`可能无法满足所有需求,这时可以创建自定义的`TableModel`,实现更复杂的数据结构和逻辑。 2. **渲染与编辑器**:可以使用`TableCellRenderer`和`...

    JTable动态刷新数据

    首先,在使用 JTable 之前,需要了解 JTable 的基本概念和使用方法。JTable 是一个基于表格的数据展示组件,可以用来展示大量数据。它的数据模型是基于 TableModel 接口实现的,TableModel 负责存储和管理数据。 在...

    JTable数据库基本操作多行增删改查

    * 删除操作:使用 deleteRow() 方法可以删除一行数据从模型中。 * 保存操作:使用 saveRow() 方法可以保存一行数据到模型中。 * 获取操作:使用 getRow() 方法可以获取一行数据从模型中。 ChangeList 在 ...

    JAVA JTable使用实例

    总结起来,`JAVA JTable`的使用涉及到数据模型的创建、数据的填充、表格的展示以及与用户的交互。在实际项目中,`JTable`是一个强大的工具,能够灵活地处理和展示结构化的数据。通过理解并掌握这些基本概念和技巧,...

    JTable表头排序的两种方法

    `DefaultTableColumnModel`是`JTable`默认使用的列模型,它支持列的排序功能。以下是如何设置`JTable`表头排序的步骤: 1. **获取表头视图(HeaderView)**:`JTable`的表头视图是`JTableHeader`,它负责处理表头的...

    JTable的初步编程

    在`TestJTable_Upupsky`项目中,可能包含了演示`JTable`基本用法的示例代码。通过阅读和运行这些代码,你可以更深入地理解`JTable`的工作原理和使用方式。同时,不要忘记查阅Java官方文档和在线教程,以便获取更多...

    一个详细的JTable使用例子

    1. **JTable的基本用法**: JTable是基于AbstractTableModel的,因此在创建自定义的表格模型时,通常需要继承AbstractTableModel。在这个例子中,`ProductTableModel`扩展了AbstractTableModel,实现了数据的获取和...

    jtable详解

    1. **无参构造函数**:`JTable()`,创建一个使用系统默认模型的空表格。 2. **指定行列数量**:`JTable(int numRows, int numColumns)`,创建一个具有特定行数和列数的空表格,使用`DefaultTableModel`作为数据模型...

    swing中JTable的简单使用

    JTable通常与TableModel接口结合使用,该接口定义了如何将数据模型绑定到表格视图。你可以自定义TableModel来适应你的特定数据需求,或者使用预定义的DefaultTableModel,适用于简单的数据结构。 创建JTable的基本...

    java表格jtable源码

    在"tableLearning"这个压缩包中,可能包含的资源有示例代码、教程文档等,通过学习这些内容,你可以深入理解JTable的使用方法,包括如何读取文本数据、设置下拉选项、保存数据以及实现其他高级功能。对JTable的熟练...

    支持ResultSet的JTable

    我们通常会创建一个自定义的`TableModel`子类,或者使用现有的如`DefaultTableModel`,并将其设置为`JTable`的模型。 5. **将ResultSet转换为TableModel**:为了让`JTable`能显示`ResultSet`的数据,我们需要将`...

    JTable实现行间拖拽的最简单方法

    如果你使用的是自定义的`TableModel`,你需要实现相应的`insertRow`和`removeRow`方法以保持数据的一致性。 通过这样的方式,我们实现了`JTable`行间的拖放功能,而且无需实现DnD接口,简化了实现过程。这使得在已...

    JTable(还分页面板示例)

    `TabbedPane`提供了添加、删除和切换面板的功能,可以使用`addTab()`方法添加新的面板,每个面板可以包含一个独立的`JTable`。 在`WinBase.java`文件中,可能会有创建`JTabbedPane`以及向其添加`JTable`实例的代码...

Global site tag (gtag.js) - Google Analytics