0
그래서 사용자가 Shift 키를 누를 때까지 현재 마우스 위치를 텍스트 상자에 쓰고 마우스 포인터를 놓으면 가장 최근의 마우스 위치가 텍스트 상자의 마지막 텍스트 내가 한 짓을 열심히 :
처음으로 다음과 같은 클래스를 만들었습니다.Java - KeyListener가 작동하지 않음/마우스 위치가 읽히지 않음
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 키를 누르면 루프가 중단되지 않습니다.
1. 더 나은 도움을 위해 SSCCE/MCVE를 짧게 실행하고 컴파일 할 수있게하십시오. 2. while (! kl.getState()) {'어쩌면/무한 루프를 만들 수 있습니까? – mKorbel
나는 그것을 시도 할 수있다. 그리고 그 목표는 그 상태가 사실이 될 때 멈추게하는 것이 될 것입니다. 그것은 쉬프트가 눌려지면 계획대로 작동해야합니다. –
EDT의 컨텍스트 내에서 while 루프가 실행되고있어 UI가 업데이트되지 않습니다. 자세한 내용은 [동시성의 동시성] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)을 참조하십시오. [키 바인딩 사용 방법] (URL : http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) – MadProgrammer