如何使用单个滚动条滚动两个或更多JTable?

时间:2012-08-21 18:08:51

标签: java swing jtable jscrollpane

如何使用一个JScrollPane中的一个滚动来移动另一个或多个JScrollPane

例如:

我在单独的JTable中有三个JScrollPane个。我想将滚动窗格绑定到彼此。

如果我使用一个 - 另一个将以相同的方式滚动。

我找不到的某种Listener

任何sugestions?

最好的问候。

3 个答案:

答案 0 :(得分:9)

保留JTables'标头的方法是对每个BoundedRangeModel的垂直滚动条使用相同的JScrollPane,并将每个ScrollPane添加到单个JPanel

class ParallelTables {
    static JScrollPane createTable() {
        DefaultTableModel model = new DefaultTableModel(100, 2);
        for (int row=model.getRowCount(); --row>=0;) {
            model.setValueAt(row, row, 0);
        }
        JTable table = new JTable(model);
        return new JScrollPane(table);
    }

    public static void main(String[] args) throws Exception {

        JScrollPane scrollerA = createTable();
        JScrollPane scrollerB = createTable();
        scrollerA.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        // the following statement binds the same BoundedRangeModel to both vertical scrollbars.
        scrollerA.getVerticalScrollBar().setModel(
                scrollerB.getVerticalScrollBar().getModel());
        JPanel panel = new JPanel();
        panel.add(scrollerA);
        panel.add(scrollerB);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}

<强>参考:

答案 1 :(得分:1)

  

我在单独的JScrollPanes中有三个JTable。我想“绑定”滚动到彼此。

不要将JTable放在JScrollPanes中。将每个JTable放入JPanel,并将3个JPanel放入一个JScrollPane。

将3个JTable组合成一个JTable可能更容易。

答案 2 :(得分:1)

David Kroukamp的建议是让滚动条共享一个模型,如下所示:

    scrollerA.getVerticalScrollBar().setModel(
            scrollerB.getVerticalScrollBar().getModel());

这当然可以正常工作,但是如果你想为所有表使用一个滚动条,那么用一个滚动条替换另一个滚动条就更简单了:

    scrollerA.setVerticalScrollBar(
            scrollerB.getVerticalScrollBar());

此方法只显示一个滚动条,并滚动两个表格。