因此,除了鼠标和键盘侦听器之外,我的程序中的所有东西都能工作。我有几个actionListener在Jbuttons上工作,它们正是我在这里想要做的,但任务说它必须同时适用于这三个。所以我想知道为什么它会编译,但不起作用。我做错什么了吗?
panel.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP){
shape.addSides();
}
if(e.getKeyCode() == KeyEvent.VK_DOWN){
shape.subSides();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
}
);
panel.addMouseListener(new MouseListener(){
@Override
public void mouseEntered(MouseEvent e){
if(e.getButton() == MouseEvent.BUTTON1){
shape.addSides();
}
if(e.getButton() == MouseEvent.BUTTON3){
shape.subSides();
}
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
);
关于KeyListener:除非被侦听的组件是可聚焦的并且具有焦点,否则它不会工作。因此,您需要在JPanel上调用setFocusable(true)
和requestFocusInWindow()
。至于MouseListener,可能有其他东西正在获取鼠标事件并阻止它到达您的JPanel。要调试它,您需要发布一个最小的、可编译的、可运行的示例程序。
同样关于MouseListener,您在mouseEntered事件中检查getButton()
,这毫无意义。按钮不涉及此类事件。你是不是想检查鼠标动作监听器的mouseDragged(...)
?