我有两个JTable,它们必须同步所有的方式。这两个JTable被设置为允许录制。
因此,我想知道如何在列移动时同步JTableHeader行为。
非常感谢,伙计。
发布于 2013-11-29 09:41:06
为此,您可以使用具有TableColumnModelListener的columnMoved(TableColumnModelEvent arg0)。允许您根据源表交换其他表中的列。示例代码:
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);
}
}发布于 2013-12-24 09:43:49
我的代码如下所示
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) {}
});
}https://stackoverflow.com/questions/20277839
复制相似问题