【发布时间】:2011-01-28 11:53:15
【问题描述】:
我正面临一个令人沮丧的问题。我有一个应用程序,其中滚轮在 JDialog 窗口中不起作用(但在 JFrame 中起作用)。
代码如下:
import javax.swing.*;
import java.awt.event.*;
public class Failtest extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Failtest();
}
});
}
public Failtest() {
super();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("FRAME");
JScrollPane sp1 = new JScrollPane(getNewList());
add(sp1);
setSize(150, 150);
setVisible(true);
JDialog d = new JDialog(this, false);// NOT WORKING
//JDialog d = new JDialog((JFrame)null, false); // NOT WORKING
//JDialog d = new JDialog((JDialog)null, false);// WORKING - WHY?
d.setTitle("DIALOG");
d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
JScrollPane sp = new JScrollPane(getNewList());
d.add(sp);
d.setSize(150, 150);
d.setVisible(true);
}
public JList getNewList() {
String objs[] = new String[30];
for(int i=0; i<objs.length; i++) {
objs[i] = "Item "+i;
}
JList l = new JList(objs);
return l;
}
}
我找到了一个解决方案,它在 java 代码中作为注释出现 - 构造函数接收 (JDialog)null 参数。
有人可以启发我吗? 我的观点是这是一个 java 错误。
在带有 1 个 JDK 和 2 个 JRE 的 Windows XP-SP3 上测试:
D:\Program Files\Java\jdk1.6.0_17\bin>javac -version
javac 1.6.0_17
D:\Program Files\Java\jdk1.6.0_17\bin>java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
D:\Program Files\Java\jdk1.6.0_17\bin>cd ..
D:\Program Files\Java\jdk1.6.0_17>java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
提前谢谢你,
尤利安·塞尔巴诺伊乌
PS:这个问题并不新鲜 - 代码取自一个论坛 (here),其中也提到了这个问题 - 但没有解决方案(目前)
稍后编辑: jre/jdk_1.6.0_10, 1.6.0_16 问题依然存在
后期编辑 2: 回到家,在 linux (Ubuntu - lucid/lynx) 上测试 - 使用来自发行版 repo 的 openjdk 和 sun-java 并且它可以工作(我使用在 Windows 上编译的 .class 文件)!!! - 所以我相信我正面临在某些 Windows 配置上发生的 JRE 错误。
【问题讨论】:
-
请不要二合一地给我们问题。
-
您能详细说明一下吗?我只是说这不适用于 JDialog 在某些配置上(我的情况是 XP SP3),如果可能的话,我想知道一种解决方法。我现在知道在某些配置(具有相同 JRE 的事件)上它可以工作