如何使用 Mouselistener?移动按钮?
How can the Mouselistener be used ? to move buttons?
我目前正在开发一款小型桌游。我必须将 "objects" 放在 Button 数组上。我想放置的对象是 1*1 1*2 等,它们由禁用按钮表示。有什么方法可以让我用键盘的按键监听器移动生成的禁用按钮,因为我无法让它工作
public GuiP1() {
super();
Panel.setLayout(null);
this.add(Panel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("BattleshipsP1");
this.setSize(640, 1000);
this.setVisible(false);
this.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent arg0) {
}
public void keyReleased(KeyEvent arg0) {
if (arg0.getKeyCode() == KeyEvent.VK_RIGHT) {
System.out.println("VK_RIGHT");
} else if (arg0.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("VK_LEFT");
} else if (arg0.getKeyCode() == KeyEvent.VK_UP) {
System.out.println("VK_UP");
} else if (arg0.getKeyCode() == KeyEvent.VK_DOWN) {
System.out.println("VK_DOWN");
}
}
public void keyTyped(KeyEvent arg0) {
}
});
Grid();
this.setVisible(true);
}
它不会监听被按下的按键
谢谢 JFluX
您的 KeyListener 没有工作,因为被监听的组件必须是可聚焦的并且有焦点才能工作。一个 kludge 解决方案是通过
强制监听组件获得焦点
- 通过
setFocusable(true)
使监听组件可聚焦
- 通过
requestFocusInWindow()
给它焦点
- 并通过调用
setFocusable(false)
使添加的组件不可聚焦。
一个更好的解决方案是使用 Key Bindings,它与组件焦点没有紧密联系。
我目前正在开发一款小型桌游。我必须将 "objects" 放在 Button 数组上。我想放置的对象是 1*1 1*2 等,它们由禁用按钮表示。有什么方法可以让我用键盘的按键监听器移动生成的禁用按钮,因为我无法让它工作
public GuiP1() {
super();
Panel.setLayout(null);
this.add(Panel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("BattleshipsP1");
this.setSize(640, 1000);
this.setVisible(false);
this.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent arg0) {
}
public void keyReleased(KeyEvent arg0) {
if (arg0.getKeyCode() == KeyEvent.VK_RIGHT) {
System.out.println("VK_RIGHT");
} else if (arg0.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("VK_LEFT");
} else if (arg0.getKeyCode() == KeyEvent.VK_UP) {
System.out.println("VK_UP");
} else if (arg0.getKeyCode() == KeyEvent.VK_DOWN) {
System.out.println("VK_DOWN");
}
}
public void keyTyped(KeyEvent arg0) {
}
});
Grid();
this.setVisible(true);
}
它不会监听被按下的按键
谢谢 JFluX
您的 KeyListener 没有工作,因为被监听的组件必须是可聚焦的并且有焦点才能工作。一个 kludge 解决方案是通过
强制监听组件获得焦点- 通过
setFocusable(true)
使监听组件可聚焦
- 通过
requestFocusInWindow()
给它焦点
- 并通过调用
setFocusable(false)
使添加的组件不可聚焦。
一个更好的解决方案是使用 Key Bindings,它与组件焦点没有紧密联系。