且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-12-04 15:59:34

首先,让我们建立一个简单的Java Swing JTable测试.

First, let's set up a simple Java Swing JTable test.

使用这样排列的数据,我们要做的就是将重复的Group数据值更改为空格.

With the data arranged like this, all we have to do is change the duplicate Group data values to spaces.

我们通过为JTable创建表模型来做到这一点.

We do that by creating a table model for the JTable.

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

First, here's the code to create the 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());
    }
}

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

Next, here's the code to create the table model. I used a hard coded data source. You would probably get the data from somewhere.

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;
    }

}