Java 当列移动时,如何同步两个JTable和JTableHeader?
我有两个JTable,它们必须互相同步。 这两个JTable设置为允许录制 所以我想知道当列移动时如何同步JTableHeader行为Java 当列移动时,如何同步两个JTable和JTableHeader?,java,swing,jtable,Java,Swing,Jtable,我有两个JTable,它们必须互相同步。 这两个JTable设置为允许录制 所以我想知道当列移动时如何同步JTableHeader行为 非常感谢,伙计。为此,您可以使用具有。允许您根据源表交换其他表中的列。示例代码: import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event
非常感谢,伙计。为此,您可以使用具有。允许您根据源表交换其他表中的列。示例代码:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
import javax.swing.table.DefaultTableModel;
public class Example {
public static void main(String[] args) {
new Example();
}
public Example() {
JFrame frame = new JFrame("Rotation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable t = new JTable(new DefaultTableModel(new Object[][]{{1,2}},new Object[]{"1","2"}));
final JTable t1 = new JTable(new DefaultTableModel(new Object[][]{{1,2}},new Object[]{"1","2"}));
frame.getContentPane().add(new JScrollPane(t),BorderLayout.WEST);
frame.getContentPane().add(new JScrollPane(t1),BorderLayout.EAST);
t.getColumnModel().addColumnModelListener(new TableColumnModelListener() {
@Override
public void columnSelectionChanged(ListSelectionEvent arg0) {
}
@Override
public void columnRemoved(TableColumnModelEvent arg0) {
}
@Override
public void columnMoved(TableColumnModelEvent arg0) {
int fromIndex = arg0.getFromIndex();
int toIndex = arg0.getToIndex();
t1.moveColumn(fromIndex, toIndex);
}
@Override
public void columnMarginChanged(ChangeEvent arg0) {
}
@Override
public void columnAdded(TableColumnModelEvent arg0) {
}
});
frame.pack();
frame.setVisible(true);
}
}
我的代码如下
public static void syncTableColumnOrder(final JTable main, final JTable... tables) {
/* if table is not reordering-allowed, this method is meaningless */
if (!main.getReorderingAllowed())
return;
/* if two tables trigger event each other, it'll be infinite loop */
for (JTable table : tables) {
if (table == null) continue;
table.setReorderingAllowed(false);
}
/* when main table moves coloumn, effect others */
main.getColumnModel().addColumnModelListener(new TableColumnModelListener() {
@Override
public void columnAdded(TableColumnModelEvent e) {}
@Override
public void columnRemoved(TableColumnModelEvent e) {}
@Override
public void columnMoved(TableColumnModelEvent e) {
for (JTable table : tables) {
table.moveColumn(e.getFromIndex(), e.getToIndex());
}
}
@Override
public void columnMarginChanged(ChangeEvent e) {}
@Override
public void columnSelectionChanged(ListSelectionEvent e) {}
});
}
嗨,亚历克斯2410:它很管用!谢谢你,伙计。但一个缺陷是这两个表不能相互同步,因为前表触发另一个表的“moveColumn”,而方法“moveColumn”将触发另一个事件。我想这将是一个无限循环。嗨,亚历克斯2410:对不起,我不明白你的意思。我不知道在事件触发时如何设置标志。再次感谢!