首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当列移动时,如何同步两个JTable和JTableHeader?

当列移动时,如何同步两个JTable和JTableHeader?
EN

Stack Overflow用户
提问于 2013-11-29 03:22:34
回答 2查看 383关注 0票数 0

我有两个JTable,它们必须同步所有的方式。这两个JTable被设置为允许录制。

因此,我想知道如何在列移动时同步JTableHeader行为。

非常感谢,伙计。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-29 09:41:06

为此,您可以使用具有TableColumnModelListenercolumnMoved(TableColumnModelEvent arg0)。允许您根据源表交换其他表中的列。示例代码:

代码语言:javascript
复制
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);
    }

}
票数 1
EN

Stack Overflow用户

发布于 2013-12-24 09:43:49

我的代码如下所示

代码语言:javascript
复制
 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) {}
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20277839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档