0
화면 키를 가로 질러 움직이는 일반 JFrame을 원합니다. 그다지 쉬운 일이 아닙니다. 나는 거친 코드 e.getKeyChar()화살표 키로 JFrame을 이동 하시겠습니까?
그것은 가능하다조차 얻을 몇 가지 이유를 들어
? 나는 시작한 이래로 어떻게 든 기술을 재 작성해야한다고 생각하지만, 잘못된 것이있다.프롬프트 조정 -
public class Main implements Runnable {
private int xLocation = 200;
private int yLocation = 200;
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Main());
}
@Override
public void run() {
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventDispatcher(new MyDispatcher());
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
JPanel panel = new JPanel();
panel.add(new JLabel("Label"));
panel.add(new JButton(new AbstractAction("Close") {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}));
frame.add(panel);
frame.pack();
frame.setLocation(xLocation, yLocation);
frame.setVisible(true);
}
private class MyDispatcher implements KeyEventDispatcher, KeyListener {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
char key = e.getKeyChar();
if(key==KeyEvent.VK_LEFT){
}
if (e.getID() == KeyEvent.KEY_PRESSED) {
//System.out.println("tester");
} else if (e.getID() == KeyEvent.KEY_RELEASED) {
//System.out.println("2test2");
} else if (e.getID() == KeyEvent.KEY_TYPED) {
//System.out.println("3test3");
}
return false;
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("e.getKeyChar() " + e.getKeyChar());
char key = e.getKeyChar();
if (key == KeyEvent.VK_LEFT) {
xLocation += 5;
}
frame.setLocation(xLocation, yLocation);
frame.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
}