gpt4 book ai didi

java - 重新使用 JTableHeader

转载 作者:行者123 更新时间:2023-11-29 05:07:07 24 4
gpt4 key购买 nike

下面的代码显示了 2 个 JTable。

因为它们都具有完全相同的标题,所以为了提高效率,我希望重用第一个表中的标题。

然而,运行代码会导致标题出现在第二个表中,但不会出现在它最初来自的表中。

我对解决方法不太感兴趣,但是 - 为了学习和理解 - 更感兴趣的是找出标题没有出现在第一个表中的原因。

代码如下:

public class HeaderTest1 {

public void doTheTest() {
JFrame testFrame = new JFrame("Header Test");
JPanel pane = new JPanel();

Container theContentPane = testFrame.getContentPane();

BoxLayout box = new BoxLayout(pane, BoxLayout.Y_AXIS);
pane.setLayout(box);
theContentPane.add(pane);

String theData[][]
= {
{"One", "two", "3"},
{"four", "5", "six"},
{"7", "8", "9.0"},
{"£10.00", "11", "twelve"}
};

String columnNames[] = {"Column 1", "Column 2", "Column 3"};

JTable firstTable = new JTable(theData, columnNames);

JScrollPane thisScrollPane = new JScrollPane(firstTable);
JTableHeader thisTableHeader = firstTable.getTableHeader();

pane.add(thisScrollPane);

buildTheSecondTable(thisTableHeader, firstTable, columnNames, pane);

testFrame.pack();
testFrame.setVisible(true);
}

private void buildTheSecondTable(JTableHeader headerFromTheFirstTable,
JTable firstTable, String[] columnNames, JPanel pane) {

JTable secondTable = new JTable();
int columnCount = columnNames.length;

JScrollPane thisScrollPane = new JScrollPane(secondTable);
secondTable.setTableHeader(headerFromTheFirstTable);

Object[][] emptyData = new Object[1][columnCount];
for (int n = 0; n < columnCount; n++) {
emptyData[0][n] = "";
}
DefaultTableModel thisTableModel = new DefaultTableModel();
thisTableModel.setDataVector(emptyData, columnNames);
secondTable.setModel(thisTableModel);
secondTable.setLayout(firstTable.getLayout());
secondTable.setCellEditor(firstTable.getCellEditor());
pane.add(thisScrollPane);
}

public static void main(String[] args) throws SQLException, ParseException {
HeaderTest thisTest = new HeaderTest();
thisTest.doTheTest();
}

如有任何建议,我们将不胜感激

最佳答案

一个 Swing 组件只能有一个父组件,因此您不能共享表头组件。

但是您可以共享列名数组:

JTable firstTable = new JTable(theData, columnNames);

在您的 buildTheSecondTable 方法中,您可以访问列名数组,因此只需使用:

//DefaultTableModel thisTableModel = new DefaultTableModel();
DefaultTableModel thisTableModel = new DefaultTableModel(columnNames);

然后您可以将数据添加到模型中,并将模型添加到表中。

然后在将模型添加到表格后重新排序代码以创建 JScrollPane。

此外,去掉 table.setLayout() 代码。您永远不会在表格上使用布局管理器。您不向表中添加组件。该表在不使用真实组件的情况下呈现数据本身。

关于java - 重新使用 JTableHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com