如何解决JScrollPane覆盖setHvalue
我想修改我的JScrollPane,以便在更改水平位置时,将位置hvalue发送到另一个类。我不希望其他类每次都必须检索此值,因为在必须尽快完成的任务中,该值会反复发生。 我无法找到有关默认使用的确切语法的任何文档,但我猜测我想要的内容将如下所示:
import java.lang.Math.*;
import javax.swing.*;
public class scroll {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(3);
panel p = new panel();
JScrollPane sp = new JScrollPane(p,21,31) {
@Override
public final void setHvalue(double value) {
hvalue = value;
p.sendH((int) Math.round(value));
}
};
f.add(sp);
f.setSize(333,333);
f.setVisible(true);
}
}
其中将包含一个由类控制的面板对象:
import javax.swing.*;
public class panel extends JPanel {
private static int H;
public panel() {}
public static void sendH(int x) {
H=x;
System.out.println(x);
}
}
尝试编译此代码会产生错误消息:
-
scroll.java.11:错误:方法未覆盖或从超类型实现方法
-
@Override
-
scroll.java.13:错误:找不到符号
-
hvalue = value;
-
符号:变量hvalue
基本上是他们说我无法修改setHvalue()的方式。有什么办法可以解决此问题,也可以通过其他方式发送更改后的hvalue,而不是在每次需要时都检索它?
解决方法
更改水平位置时,位置hvalue将发送到另一个类。
这是通过在水平滚动条上添加AdjustmentListener
来完成的。
但是,如果您在每次更改时都不使用该信息,则这是多余的开销。
我不建议使用这种方法。
我不希望其他类每次都必须检索此值,因为在必须尽快完成的任务中,该值会反复发生。
调用滚动条的getValue()
方法不会给您的任务增加任何可衡量的开销。
您的任务只需要引用滚动窗格,因此您可以访问滚动条并获取当前值。
,实际上我想出了答案,对此感到抱歉。事实证明,方法getHvalue仅适用于awt ScrollPane,而不是swing JScrollPane继承的。如果有人对某天有兴趣,我将在此处发布一个工作版本(尽管我猜测camickr的方法更好)。 JScrollPane类是:
import java.awt.*;
import javax.swing.*;
import javax.accessibility.*;
public class scroll {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(3);
panel p = new panel() {
@Override
public Dimension getMinimumSize(){
return new Dimension(getWidth(),getHeight());
}
@Override
public Dimension getPreferredSize(){
return new Dimension(getWidth(),getHeight());
}
@Override
public Dimension getMaximumSize(){
return new Dimension(getWidth(),getHeight());
}
};
JScrollPane sp = new JScrollPane(p,22,32);
sp.setHorizontalScrollBar( new JScrollBar(JScrollBar.HORIZONTAL){
@Override
public void setValue(int value) {
BoundedRangeModel m = getModel();
int oldValue = m.getValue();
m.setValue(value);
if (accessibleContext != null) {
accessibleContext.firePropertyChange(
AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,Integer.valueOf(oldValue),Integer.valueOf(m.getValue()));
}
p.sendH(value);
}
});
f.add(sp);
f.setSize(333,333);
p.setSize(400,400);
f.setVisible(true);
}
}
,面板类为:
import javax.swing.*;
public class panel extends JPanel {
private static int H;
public panel() {}
public static void sendH(int x) {
H=x;
System.out.println(x);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。