3

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

例如:

JTable在单独的 s 中有三个JScrollPanes。我想将滚动窗格相互绑定。

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

某种Listener我找不到的s?

有什么建议吗?

此致。

4

3 回答 3

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);
    }
}

参考:

于 2012-08-21T18:12:56.260 回答
2

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

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

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

于 2012-08-21T18:11:59.370 回答
1

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

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

这当然可以,但是如果您想对所有表格使用单个滚动条,则将一个滚动条替换为另一个滚动条会更简单:

    scrollerA.setVerticalScrollBar(
            scrollerB.getVerticalScrollBar());

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

于 2014-06-14T13:50:15.437 回答