gpt4 book ai didi

java - 使用Jinput弹出JFrame WIndow警报

转载 作者:行者123 更新时间:2023-12-01 05:01:01 25 4
gpt4 key购买 nike

使用Jinput和 Netbeans 中的 Java,我正在开发一个非常小的项目,当用户按下当用户放开 'k' 时,键盘并终止 JFrame 警报窗口。在我的代码中,我似乎陷入了 while 循环,因为 JFrame 在第一次按下时打开并且似乎无法关闭。我进行了研究,发现使用 javax.swing.Timer 是更好的方法。然而,由于我是这方面的新手,使用计时器的所有不同方法让我更加困惑。有人可以看看我的代码并指出我正确的方向吗?

这是我的代码;

public void startPolling() {
while(true) {
ControllerEnvironment.getDefaultEnvironment().getControllers();
ca[index].poll();
EventQueue queue = ca[index].getEventQueue();
Event event = new Event();
while(queue.getNextEvent(event)) {
StringBuffer buffer = new StringBuffer(ca[index].getName());
buffer.append(" at ");
buffer.append(event.getNanos()).append(", ");
Component comp = event.getComponent();


buffer.append(comp.getName()).append(" changed to ");
float value = event.getValue();
if(comp.isAnalog()) {
buffer.append(value);
} else {
if(value==1.0f) {
buffer.append("On");
if ("K".equals(comp.getName())){
alarmBox();
}
} else {
buffer.append("Off");
if ("K".equals(comp.getName())){
alarmBox.setVisible(false);
}
}
}
System.out.println(buffer.toString());
}
}
}

alarmBox() 是我的 JFrame。

我正在研究它,这是我更新的代码:

公共(public)无效startPolling(){

    Timer timer = new Timer(50, new ActionListener() {

public void actionPerformed(ActionEvent e) {

ca[index].poll();
EventQueue queue = ca[index].getEventQueue();
Event event = new Event();
while(queue.getNextEvent(event)) {
StringBuffer buffer = new StringBuffer(ca[index].getName());
buffer.append(" at ");
buffer.append(event.getNanos()).append(", ");
Component comp = event.getComponent();

buffer.append(comp.getName()).append(" changed to ");
float value = event.getValue();
if(comp.isAnalog()) {
buffer.append(value);
} else {
if(value==1.0f) {
buffer.append("On");
if ("K".equals(comp.getName())){
alarmBox();

}
} else {
buffer.append("Off");
if ("K".equals(comp.getName())){
alarmBox.dispose();
}
}
}
System.out.println(buffer.toString());
}

try {
Thread.sleep(20);
} catch (InterruptedException f) {
f.printStackTrace();
}


}

}); timer.start();

最佳答案

如果您只想打开和关闭窗口,可以使用计时器吗?对于一个简单的任务,你有一个非常复杂的代码。您可以向 JFrame 添加一个 ComponentListener 来隐藏,如下所示:

frame.addComponentListener(new ComponentAdapter(){

public void componentMoved(ComponentEvent e) {
if (popup.isVisible()){
popup.setVisible(false);
}
}
});

关于java - 使用Jinput弹出JFrame WIndow警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com