Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当列移动时,如何同步两个JTable和JTableHeader?_Java_Swing_Jtable - Fatal编程技术网

Java 当列移动时,如何同步两个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

我有两个JTable,它们必须互相同步。 这两个JTable设置为允许录制

所以我想知道当列移动时如何同步JTableHeader行为


非常感谢,伙计。

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

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:对不起,我不明白你的意思。我不知道在事件触发时如何设置标志。再次感谢!