在一个简单的计算器应用程序中,我使用抽象操作来处理用鼠标单击的按钮和按下的相应数字键盘键(带有键绑定)。我希望在使用键盘时发生某些外观变化,例如当我按下数字 1 键时更改 JButton 数字 1 的边框。并在发布时将其更改回来。这一切都有效。然后我又开始用鼠标按下 JButtons 并意识到释放键的动作永远不会被调用,显然是因为我没有使用键绑定。所以我的问题是,有没有办法在鼠标释放/按钮抬起时调用适当的释放抽象动作?
当我发现这一点时,我最初尝试了这个:
Abstract action(){
set border to this..
code..
code..
code..
set border to this..
}
所以无论是按键还是鼠标,它都会改变。但是它不会改变,或者可能会变得如此之快以至于无法检测到。
在这种情况下注册鼠标侦听器是没有意义的。无论如何我都试过了,我似乎无法将抽象动作注册为鼠标监听器。
感谢您的意见和想法。
我注册了actionlistener:
btnMultiplication.addActionListener( operatorAction );
btnDivision.addActionListener( operatorAction );
btnAddition.addActionListener( operatorAction );
btnSubtraction.addActionListener( operatorAction );
btnSix.addActionListener( numberAction );
btnSeven.addActionListener( numberAction );
btnEight.addActionListener( numberAction );
*Action 是抽象动作
我用它来键盘输入
im.put( KeyStroke.getKeyStroke( KeyEvent.VK_NUMPAD0, 0, false ), "Number" );
im.put( KeyStroke.getKeyStroke( KeyEvent.VK_NUMPAD0, 0, true ), "Number Released" );
am.put( "Number", numberAction );
am.put( "Number Released", numberActionR );
我使用Number操作来更改相应 jbutton 的边框。然后我使用Number Released再次更改边框。
显然,当我用鼠标单击时,边框会突出显示。但是释放的数字不会调用。就像我说的那样,将释放的方面全部消除,并将第一个边界更改放在抽象动作的开始,然后在抽象动作结束时进行最后的边界更改,显然速度如此之快,以至于你看不到边界的变化。