JScrollPane 覆盖 setHvalue
JScrollPane override setHvalue
我想修改我的 JScrollPane 以便当水平位置改变时,位置 hvalue 被发送到另一个 class。我不希望另一个 class 每次都必须检索此值,因为这会在必须尽快完成的任务中反复发生。
我还没有找到关于默认使用的确切语法的任何文档,但我猜我想要的看起来像这样:
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);
}
}
这将包括一个由 class:
管理的面板对象
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 = 值;
符号:变量 hvalue
据我了解,这基本上是他们说我不能修改 setHvalue() 的方式。有什么方法可以解决这个问题,或者有一种替代方法可以在更改时发送 hvalue,而不是每次需要时都检索它?
when the horizontal position is changed, the position hvalue is sent to another class.
这是通过向水平滚动条添加 AdjustmentListener
来完成的。
但是,如果您不在信息每次更改时都使用它,那么这是不需要的额外开销。
我不推荐使用这种方法。
I don't want the other class to have to retrieve this value every time as this will happen repeatedly during a task which must be finished as quickly as possible.
调用滚动条的 getValue()
方法不会给您的任务增加任何可衡量的开销。
您的任务只需要引用滚动窗格,这样您就可以访问滚动条并获取当前值。
其实我已经找到答案了,很抱歉。原来getHvalue这个方法只是针对awt ScrollPane的,并没有被swing JScrollPane继承。我将在这里 post 一个工作版本,以防有一天其他人感兴趣(尽管我猜 camickr 的方法更好)。
JScrollPane class 是:
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);
}
}
面板 class 是:
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);
}
}
我想修改我的 JScrollPane 以便当水平位置改变时,位置 hvalue 被发送到另一个 class。我不希望另一个 class 每次都必须检索此值,因为这会在必须尽快完成的任务中反复发生。 我还没有找到关于默认使用的确切语法的任何文档,但我猜我想要的看起来像这样:
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);
}
}
这将包括一个由 class:
管理的面板对象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 = 值;
符号:变量 hvalue
据我了解,这基本上是他们说我不能修改 setHvalue() 的方式。有什么方法可以解决这个问题,或者有一种替代方法可以在更改时发送 hvalue,而不是每次需要时都检索它?
when the horizontal position is changed, the position hvalue is sent to another class.
这是通过向水平滚动条添加 AdjustmentListener
来完成的。
但是,如果您不在信息每次更改时都使用它,那么这是不需要的额外开销。
我不推荐使用这种方法。
I don't want the other class to have to retrieve this value every time as this will happen repeatedly during a task which must be finished as quickly as possible.
调用滚动条的 getValue()
方法不会给您的任务增加任何可衡量的开销。
您的任务只需要引用滚动窗格,这样您就可以访问滚动条并获取当前值。
其实我已经找到答案了,很抱歉。原来getHvalue这个方法只是针对awt ScrollPane的,并没有被swing JScrollPane继承。我将在这里 post 一个工作版本,以防有一天其他人感兴趣(尽管我猜 camickr 的方法更好)。 JScrollPane class 是:
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);
}
}
面板 class 是:
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);
}
}