java JScrollPane重写setHvalue
我想修改我的JScrollPane,这样当水平位置改变时,position 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);
}
}
尝试编译此代码会产生错误消息:
滚动。JAVA11:错误:方法不重写或实现超类型中的方法
@覆盖
滚动。JAVA13:错误:找不到符号
hvalue=值
符号:变量hvalue
据我所知,这基本上是他们说我不能修改setHvalue()的方式。有没有办法解决这个问题,或者在hvalue发生更改时发送它,而不是在每次需要时检索它
# 1 楼答案
这是通过向水平滚动条添加一个
AdjustmentListener
来完成的但是,如果您不在信息每次更改时都使用该信息,则这是不需要的额外开销
我不建议使用这种方法
调用滚动条的
getValue()
方法不会给任务增加任何可测量的开销您的任务只需要引用滚动窗格,这样您就可以访问滚动条并获取当前值
# 2 楼答案
事实上我找到了答案,对此我很抱歉。结果表明,getHvalue方法仅适用于awt ScrollPane,而不是由swing JScrollPane继承。我将在这里发布一个工作版本,以防有人对某一天感兴趣(尽管我猜camickr的方法更好)。 JScrollPane类是:
面板类为: