gpt4 book ai didi

java - 如何让多个 JTable 表头同步它们的列宽、排序等?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:09 25 4
gpt4 key购买 nike

我有一个界面,其中有多个相互堆叠的小型 JTable。我希望它们的列大小、排序、过滤等保持同步。有没有直接的方法来做到这一点?

对于列宽,我尝试让它们共享一个公共(public)的 TableHeaderModel,但这似乎带来了意想不到的问题,例如只能使用最后添加的表格调整大小。如果有人对此有解决方案,我可以只让它们的列宽保持同步,同时能够使用任何表格调整大小。

我在下面发布了一个代码示例。运行时,您会注意到您无法调整第一个或第二个表标题的大小,但第三个可以调整所有表标题的大小。我想要第三个表的行为,但来自任何表头。

谢谢。

package javaapplication5;

public class NewJFrame extends javax.swing.JFrame {

private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JTable jTable1;
private javax.swing.JTable jTable2;
private javax.swing.JTable jTable3;

public NewJFrame() {
initComponents();

jTable2.setColumnModel(jTable1.getColumnModel());
jTable3.setColumnModel(jTable1.getColumnModel());
}

private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jScrollPane2 = new javax.swing.JScrollPane();
jTable2 = new javax.swing.JTable();
jScrollPane3 = new javax.swing.JScrollPane();
jTable3 = new javax.swing.JTable();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(),
javax.swing.BoxLayout.Y_AXIS));

jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"a", "b", "c", "d"},
{"e", "f", "g", "h"},
{"i", "j", "k", "l"},
{"m", "n", "o", "p"}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);

getContentPane().add(jScrollPane1);

jTable2.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"q", "r", "s", "t"},
{"u", "v", "w", "x"},
{"y", "z", "1", "2"},
{"3", "4", "5", "6"}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane2.setViewportView(jTable2);

getContentPane().add(jScrollPane2);

jTable3.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"7", "8", "9", "10"},
{"11", "12", "13", "14"},
{"15", "16", "17", "18"},
{"19", "20", "21", "22"}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane3.setViewportView(jTable3);

getContentPane().add(jScrollPane3);

pack();
}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
}

最佳答案

在等待答案的过程中,我偶然发现了解决问题的办法。这显然是一个已知的错误。我使用了此处发布的解决方案,并在其下方的评论中进行了更改。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4816146

关于java - 如何让多个 JTable 表头同步它们的列宽、排序等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3214979/

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