Netbeans でJinputと Javaを使用して、非常に小さなプロジェクトに取り組んでいます。ユーザーがキーボードの をJFrame
押したときにアラーム ウィンドウをポップアップし、ユーザーが を離したときにアラーム ウィンドウを終了するとします。私のコードでは、最初のプレスダウンで開いて閉じることができなかったので、while ループで動けなくなったようです。私が調査したところ、使用する方が良い方法であることがわかりました。しかし、私はこれが初心者なので、タイマーを使用するさまざまな方法がすべて私をさらに混乱させました。誰かが私のコードを見て、正しい方向に向けてくれませんか?'K'
JFrame
'k'
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 void 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();