`
joyo_fly
  • 浏览: 87796 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

使用JTable

阅读更多

1、创建一个简单的Table

JTable table = new JTable(data, columnNames);

其中data和columnNames是两个数组,分贝代表表头和表中的数据。

下面是JTable的两个常用构造器:

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

这两个构造器虽然简单,但有很多缺陷:

(1)每个单元格可编辑;

(2)把所有的数据类型都当做String型。

(3)静态的绑定数据,在初始化时就要求绑定所有数据,不适合在运行时从数据库导入数据的需求。

2、将Table加入容器

JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true); //使用容器全部高度

JScrollPane将表头始终报纸在容器上方,如果不想用JScrollPane作为容器,必须获得TableHeader对象,并且自己将其放置到容器中。

container.setLayout(new BorderLayout());
container.add(table.getTableHeader(), BorderLayout.PAGE_START);
container.add(table, BorderLayout.CENTER);
3、设置和改变列宽

TableColumn column = null;
for (int i = 0; i < 5; i++) {
    column = table.getColumnModel().getColumn(i);
    if (i == 2) {
        column.setPreferredWidth(100); //third column is bigger
    } else {
        column.setPreferredWidth(50);
    }
}

4、用户选择

可以通过JTable.setSelectionMode方法设置选择方式,该方法包含以下参数:MULTIPLE_INTERVAL_SELECTION, SINGLE_INTERVAL_SELECTION, and SINGLE_SELECTION,分别代表不连续多选,连续多选,单选。

还有几个和选择行为有关的方法:setRowSelectionAllowed,setColumnSelectionAllowed,setCellSelectionEnabled。

获得当前选择的行或列:JTable.getSelectedRows JTable.getSelectedColumns,返回选中的行号或列号组成的数组。

如果要获得lead selection的坐标:

  String.format("Lead Selection: %d, %d. ",
    table.getSelectionModel().getLeadSelectionIndex(),
    table.getColumnModel().getSelectionModel().getLeadSelectionIndex());

用户选择会引起一系列的Selection Event发生,如对这些事件感兴趣,可以注册list selection listener进行监听。

5、创建一个TableModel

所有的TableModel对象,必须实现TableModel接口。如果编程者没有显示的提供TableModel,JTable会自动创建一个DefualtTableModel的实例。一般来说,编程者并不直接通过实现TableModel接口来创建model,可以简单的继承AbastractTableModel,这样会省好多事。

new AbstractTableModel() {
    public String getColumnName(int col) {
        return columnNames[col].toString();
    }
    public int getRowCount() { return rowData.length; }
    public int getColumnCount() { return columnNames.length; }
    public Object getValueAt(int row, int col) {
        return rowData[row][col];
    }
    public boolean isCellEditable(int row, int col)
        { return true; }
    public void setValueAt(Object value, int row, int col) {
        rowData[row][col] = value;
        fireTableCellUpdated(row, col);
    }
}//可以将数据保存在一个数组中、Vector中、Hashmap中、或是数据库中。

6、监听数据变化

通过注册TableModelListener,来监听数据变化。

public class SimpleTableDemo ... implements TableModelListener {
    ...
    public SimpleTableDemo() {
        ...
        table.getModel().addTableModelListener(this);
        ...
    }

    public void tableChanged(TableModelEvent e) {
        int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String columnName = model.getColumnName(column);
        Object data = model.getValueAt(row, column);

        ...// Do something with the data...
    }
    ...
}

7、发出数据变化事件

为了发出数据变化事件,model必须知道如何构建TableModelEvent 对象,这是一个非常复杂的过程,但是已经被DefaultTableModel所实现。如果有些场合DefaultTableModel并不适合,可以考虑AbstractTableModel,该model已经简单实现事件发送的框架。当数据发生变化时,显示调用以下方法:

 

Method Change
fireTableCellUpdated Update of specified cell.
fireTableRowsUpdated Update of specified rows
fireTableDataChanged Update of entire table (data only).
fireTableRowsInserted New rows inserted.
fireTableRowsDeleted Existing rows Deleted
fireTableStructureChanged   Invalidate entire table, both data and structure

8、Editor和Render

cell render用来显示各单元的内容(通常render的类型和单元格数据类型绑定),cell editor用来编辑单元格数据。比如,对于包含整数的单元格,会使用JLabel作为其render,而是用JTextField作为其editor。

为了决定某列的一个单元格改用何种render,table首先检查你是否显示为该列设置了render,如没有就调用model的getColumnClass方法获得单元格的数据类型,然后会根据数据类型寻找与其绑定的render。通常如下:

  • Boolean — rendered with a check box.
  • Number — rendered by a right-aligned label.
  • Double, Float — same as Number, but the object-to-text translation is performed by a NumberFormat instance (using the default number format for the current locale).
  • Date — rendered by a label, with the object-to-text translation performed by a DateFormat instance (using a short style for the date and time).
  • ImageIcon, Icon — rendered by a centered label.
  • Object — rendered by a label that displays the object's string value.
  • editor也是通过如此方法选择的。

    注意render并不控制事件,如果想捕获和table相关的事件:

     

    Situation How to Get Events
    To detect events from a cell that is being edited... Use the cell editor (or register a listener on the cell editor).
    To detect row/column/cell selections and deselections... Use a selection listener as described in Detecting User Selections.
    To detect mouse events on a column header... Register the appropriate type of mouse listener on the table's JTableHeader object. (See TableSorter.java for an example.)
    To detect other events... Register the appropriate listener

    9、自定render

     (1)创建DefaultTableCellRenderer的子类,如果DefaultTableCellRenderer不满足要求,创建一个其他类的子类并实现TableCellRender接口

    (2)通过JTable的setDefaultRenderer方法,设置与特定数据类型相关的render;通过TableColumn的setCellRenderer,设置某列的render;通过创建JTable的子类,重写getCellRenderer方法,设置某个单元格的render。

    10、使用Combobox作为editor

    JComboBox comboBox = new JComboBox();
    comboBox.addItem("Snowboarding");
    comboBox.addItem("Rowing");
    comboBox.addItem("Chasing toddlers");
    comboBox.addItem("Speed reading");
    comboBox.addItem("Teaching high school");
    comboBox.addItem("None");
    sportColumn.setCellEditor(new DefaultCellEditor(comboBox));

    分享到:
    评论

    相关推荐

      JTable使用 JTable使用

      JTable使用 JTable使用JTable使用JTable使用

      使用JTable显示数据查询

      使用JTable显示数据查询的数据集 包含数据库连接

      JTable的使用收藏

      JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...

      JTable动态刷新数据

      JTable 动态刷新数据是指在 Java Swing 应用程序中,使用 JTable 组件展示数据,并实时更新数据的过程。这种技术在很多实际应用场景中非常有用,如股票交易平台、实时监控系统、电子表格等。 首先,在使用 JTable ...

      学会JTable的使用

      在Java Swing库中,`JTable`是一个非常重要的组件,用于在GUI应用程序中展示数据集。它是Swing的`javax....通过实践和研究提供的示例代码,你将能够熟练地在Java Swing应用中使用`JTable`来构建功能丰富的用户界面。

      jTable的使用

      深入学习jTable的使用,能够帮助开发者创建用户友好的界面,使得数据的管理与展示更加直观高效。** ### jTable的基本结构与使用 jTable由`DefaultTableModel`类驱动,它负责存储表格的数据和列信息。创建一个jTable...

      swing中JTable的简单使用

      在"swing中JTable的简单使用"这个主题中,我们将深入探讨如何在Java Swing应用中有效地使用JTable。 首先,JTable是javax.swing.JTable类的实例,它是JFrame或JPanel等容器中的一个组件。JTable通常与TableModel...

      Jtable中加入复选框的两种方法

      在使用JTable时,我们需要将上述两个类组合起来使用。下面是一个简单的示例代码: ```java import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax....

      Swing之JTable的详细介绍

      下面我们将深入探讨JTable的使用方法和特性。 首先,JTable的类继承结构如下: 1. `java.lang.Object` 2. `java.awt.Component` 3. `java.awt.Container` 4. `javax.swing.JComponent` 5. `javax.swing.JTable` ...

      Java Swing高级空件JTable的用法

      使用JTable+TableModel可以轻松地将Java中的数据对象展示出来。例如,将一个JavaBean对象的属性展示在JTable中,只需要将JavaBean对象转换为TableModel接口的实现,然后将其传递给JTable组件。 4. JTable的美化 ...

      Swing JTable 常用属性

      可以直接使用 JTable 的无参构造函数创建一个空的表格控件,例如:`JTable table = new JTable();` 2. 以表头和表数据创建表格 可以使用表头和表数据创建一个 JTable,例如: ``` Object[][] cellData = {{"row1-...

      不错的jquery插件jtable

      3. **配置 jtable**:使用 JavaScript 配置 jtable 的各种参数,如字段名、标题、操作等。 4. **初始化 jtable**:调用 `$("#yourTableContainer").jtable()` 初始化表格,并传入之前配置的对象。 5. **服务器端交互...

      JTable颜色渲染代码

      该文件名为`TableDemo.java`,是一个演示如何使用JTable创建表格的应用程序。主要包含了以下几个部分: 1. **基础框架构建**:定义了JFrame类的继承,并初始化了一些组件。 2. **数据准备**:定义了一个二维数组...

      JTable连接Access并显示

      通过这个过程,初学者可以学习到如何在Java Swing应用中使用JTable与数据库进行交互,这对于构建功能丰富的桌面应用至关重要。同时,这也是Java数据库编程的基础,有助于进一步学习更复杂的数据库操作和JDBC高级特性...

      swing中JTable的使用

      类中使用JTable 实现了对JTable中行级的增删改 JFrame为自主布局,设置了背景图片以及窗口图标 有详细注释 例如: TableModel tableModel = jTable1.getModel(); DefaultTableModel dtm = (DefaultTableModel) ...

      Java的Jtable、从数据库取数据显示在表格中

      在Java中,使用JTable显示数据库中的数据是一个常见的应用场景。首先,我们需要了解如何通过Java Database Connectivity (JDBC)来连接并查询数据库。 1. **加载JDBC驱动**: - 在示例代码中,`Class.forName("sun....

      swing Jtable使用checkbox

      swing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing ...

      JTable表格自定义行高,java中JTable自定认行高[参照].pdf

      然而,在使用 JTable 时,开发者经常会遇到一些问题,例如如何设置表格的行高。 在 Java 中,JTable 的行高可以通过 setRowHeight() 方法来设置。这个方法将指定的行高应用于整个表格,但是有时候我们需要对不同的...

      jtable-弄了我一整天

      这篇文章可能涵盖了作者在理解和使用JTable过程中遇到的问题及解决方法。 描述中提到的链接指向了一篇ITEYE博客,但具体内容未给出。通常,这样的博客会包含作者的个人经验分享、问题分析、代码示例或者解决策略。...

      一个复杂的JTable(转)

      在Java编程中,开发者可以使用JTable来创建动态、可编辑的数据视图,支持排序、过滤、行选择等功能。 首先,JTable的核心在于其数据模型,即TableModel。这个模型负责管理表格中的数据,包括数据的添加、删除和修改...

    Global site tag (gtag.js) - Google Analytics