Java - 通过复选框同步两个滚动条



下面的代码创建了一个复选框,我想打开/关闭两个面板上的同步滚动。最初,当程序运行时,滚动条是独立的。当选中复选框并到达"if"语句时,scroller2 的滚动条设置为滚动条1 的滚动条模型,并且它们连接在一起,即它们一起移动。

但是,问题是当复选框未选中时,这意味着我希望滚动条再次独立。我在 else 语句中输入的任何内容似乎都不起作用。

JCheckBox check = new JCheckBox("Global");
ActionListener actionListener = new ActionListener() {
    public void actionPerformed(ActionEvent actionEvent) {
        AbstractButton abstractButton = (AbstractButton) actionEvent.getSource();
        boolean selected = abstractButton.getModel().isSelected();
        System.out.println(selected);
        if (selected){
            scroller2.getHorizontalScrollBar().setModel(scroller.getHorizontalScrollBar().getModel());
        } else {
            scroller = new JScrollPane(plotPanel);
            scroller2 = new JScrollPane(plotPanel2);
        }
    }
};
check.addActionListener(actionListener);    

这个:

scroller = new JScrollPane(plotPanel);
scroller2 = new JScrollPane(plotPanel2);

创建两个新的JScrollPanes,但你对它们不执行任何操作。了解更改变量引用的对象,此处的滚动条和滚动条2 vairables对显示的对象没有影响,并且此问题涉及引用变量引用或对象之间差异的核心区别。如果要更改显示的JScrollPane,则必须删除旧的JScrollPane,并将新的添加到GUI中。

但是你不想这样做。只需为其中一个水平 JScrollBars 提供一个新模型,特别是一个新的 DefaultBoundedRangeModel。我将使用需要 4 个整数的构造函数,并从当前模型中抓取值、范围、最小值、最大参数。

例如,像这样:

else {
    JScrollBar horizBar = scroller2.getHorizontalScrollBar();
    DefaultBoundedRangeModel currentModel = (DefaultBoundedRangeModel) horizBar.getModel();
    int extent = currentModel.getExtent();
    int min = currentModel.getMin();
    int max = currentModel.getMax();
    int value = currentModel.getValue();
    DefaultBoundedRangeModel newModel = new DefaultBoundedRangeModel(value, extent, min, max);
    horizBar.setModel(newModel);
}

注意代码未测试

相关内容

  • 没有找到相关文章

最新更新