[英]Input from jtextfield doesnt get read while in a for loop
我的問題是我有一個 for 循環,當這個循環正在運行時,我仍然希望 JTextField 的輸入被讀取,而不是在打印行時中斷循環或計時。
public class test {
public void Play() {
JTextField textField = new JTextField();
textField.addKeyListener(new KeyChecker());
JFrame jframe = new JFrame();
jframe.add(textField);
jframe.setSize(200, 30);
jframe.setVisible(true);
}
}
class KeyChecker extends KeyAdapter {
@Override
public void keyPressed(KeyEvent event)
{
for(int i = 0; i < 1; i = 0)
{
char Input = event.getKeyChar();
if(Input == 'a')
{
System.out.println("working");
} else {
System.out.println("not working");
}
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
}
}
在您的代碼中,每次按下文本字段中的鍵時,事件調度線程 ( https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html ) 都會調用keyPressed
方法。
在這種情況下, KeyEvent event
參數表示一個按鍵按下事件,因此正如 maloomeister 正確指出的那樣,在事件方法中創建循環是沒有意義的。
相反,您應該使用類的狀態( KeyChecker
或test
)執行您的邏輯。 我真的不明白為什么你應該定期檢查被按下的鍵(以及文本字段 BTW 的目的),無論如何,以下是使用單獨線程的可能解決方案。 當然,您也可以在主線程(不是EDT)中執行循環,但在非平凡的應用程序中,您永遠不應該這樣做。
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Test {
public static void main(String[] args) {
KeyChecker keyChecker = new KeyChecker();
JTextField textField = new JTextField(40);
textField.addKeyListener(keyChecker);
JFrame jframe = new JFrame();
jframe.add(textField);
jframe.pack();
jframe.setVisible(true);
Thread t = new Thread(() -> {
while(true) {
char currentKey = keyChecker.getCurrentPressedKey();
switch (currentKey) {
case 'a':
System.out.println("working");
break;
default:
System.out.println("not working");
}
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
break;
}
}
});
t.start();
}
}
class KeyChecker extends KeyAdapter {
private char currentPressedKey = 0;
@Override
public void keyPressed(KeyEvent event) {
currentPressedKey = event.getKeyChar();
}
@Override
public void keyReleased(KeyEvent e) {
currentPressedKey=0;
}
public char getCurrentPressedKey() {
return currentPressedKey;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.