У меня есть интерфейс, в котором несколько маленьких JTables расположены друг над другом.Я бы хотел, чтобы их размеры столбцов, сортировка, фильтрация и т. Д. Оставались синхронизированными.Есть ли простой способ сделать это?
Для ширины столбцов я попытался сделать так, чтобы они использовали общий 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);
}
});
}
}