所以我有一个按钮,按下时需要将当前鼠标位置写到文本框,直到用户按下shift,然后它停止并将最近的鼠标位置保留为文本框中的最终文本。继承人我做了什么:
首先创建了以下类。
public class KeyListener extends KeyAdapter {
private boolean wasPressed = false;
private int keyCode;
public KeyListener(int keyCode) {
this.keyCode = keyCode;
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("CALLED");
if(e.getKeyCode() == keyCode)
wasPressed = true;
}
public void setState(boolean state) {
wasPressed = state;
}
public boolean getState() {
return wasPressed;
}
}
然后在我的“主”课程中,我有以下代码。
JButton track1 = new JButton("Track");
KeyListener kl = new KeyListener(KeyEvent.VK_SHIFT);
...
public DisplayFrame() {
this.addKeyListener(kl);
track1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
kl.setState(false);
while(!kl.getState()) {
Point p = MouseInfo.getPointerInfo().getLocation();
topLeft.setText(p.getX() + "," + p.getY());
}
}
});
}
然后我当然将文本框添加到JPanel并且它正确显示所有内容,但是,当我单击“跟踪”按钮时没有任何反应。我可以说它正在进入循环,但文本框中没有显示文本,按shift也不会打破循环。
答案 0 :(得分:0)
尝试在actionPerformed方法中创建一个新线程,如下所示:
Thread exampleThread = new Thread() {
public void run() {
//Do your actions within the new thread
}
};
//After the thread is made, we start it.
exampleThread.start();
你必须这样做,因为actionListener在另一个线程中运行。