作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码创建了一个复选框,我想打开/关闭两个面板上的同步滚动。最初,当程序运行时,滚动条是独立的。当选中该复选框并到达“if”语句时,scroller2 的滚动条将设置为scroller1 滚动条的模型,并且它们是连接的,即它们一起移动。
但是问题是当复选框未被选中时,这意味着我希望滚动条再次独立。我在 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,但您对它们不执行任何操作。了解更改变量引用的对象,这里的scroller和scroller2变量将对显示的对象没有影响,这个问题涉及到引用之间差异的核心区别变量和引用或对象。如果您想更改显示的 JScrollPane,则必须删除旧的 JScrollPane,然后将新的 JScrollPane 添加到 GUI。
但是您不想这样做。只需为水平 JScrollBar 之一提供一个新模型,特别是一个新的 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);
}
注意代码未经测试
关于Java - 通过复选框同步两个滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471152/
我是一名优秀的程序员,十分优秀!