Java swing - JTable - 子表/分组 - 可以做到吗?

标签 java swing jtable

也许我查找得还不够仔细,但我很难找到具有子组的 Java Swing 表示例。

类似的东西:

| Table header 1 | Table header 2 | Table header 3 |
| Group A |
| Group A Col11 | | Group A Col12 | | Group A Col13 | 
| Group A Col21 | | Group A Col22 | | Group A Col23 | 
| Group B |
| Group B Col11 | | Group B Col2 | | Group A Col3 | 
....

这种事情可以用 Java Swing 表来完成吗?

最佳答案

首先,让我们设置一个简单的 Java Swing JTable 测试。

Simple JTable Test 1

数据按这样排列后,我们所要做的就是将重复的组数据值更改为空格。

Simple JTable Test 2

我们通过为 JTable 创建表模型来实现这一点。

首先,这是创建 JFrame 的代码。

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

public class JTableFrame implements Runnable {

    @Override
    public void run() {
        JFrame frame = new JFrame("JTable Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTableModel model = new JTableModel();
        JTable table = new JTable(model.getModel());
        JScrollPane scrollPane = new JScrollPane(table);
        frame.add(scrollPane);

        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new JTableFrame());
    }
}

接下来,这是创建表模型的代码。我使用了硬编码数据源。您可能会从某个地方获取数据。

import javax.swing.table.DefaultTableModel;

public class JTableModel {

    private DefaultTableModel model;

    private String[] columns = {"Group", "Alpha", "Beta", "Gamma"};

    private String[][] rows = {{"Group A", "all", "box", "game"},
            {"Group A", "apple", "band", "going"},
            {"Group B", "alabaster", "banquet", "ghost"},
            {"Group B", "alone", "boy", "ghoulish"}};

    public JTableModel() {
        this.model = new DefaultTableModel();
        this.model.setColumnIdentifiers(columns);
        setModelRows();
    }

    private void setModelRows() {
        String prevGroup = "";
        for (String[] row : rows) {
            if (row[0].equals(prevGroup)) {
                row[0] = " ";
            } else {
                prevGroup = row[0];
            }
            this.model.addRow(row);
        }
    }

    public DefaultTableModel getModel() {
        return model;
    }

}

关于Java swing - JTable - 子表/分组 - 可以做到吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23683920/

相关文章:

java - 将 float 与数字相乘时得到意想不到的结果

java - JLabel 未显示

java - 没有水平和垂直线的 JTable

java - JTable 的一个大查询还是两个小查询?

java - 可编辑 JTable 教程

java - 如何对字符串进行排序[即基于特定名称的文件名集]

java - @NonNullByDefault 返回类型与从 ExecutorService.shutdownNow() 返回的 'List<Runnable>' 不兼容(不匹配空约束)

java - 如何在JTable中的特定位置插入一列

java - 如何在应用程序中组织和管理多个数据库凭据?

java - JOption 从字符串文本调用方法?