java编程button_以编程方式在Java Swing中单击GUIbutton
即使button.doClick()者對button.doClick()滿意,我正在尋找類似于設置助記符(即button.setMnemonic(KeyEvent.VK_A)后發生的事情。 你實際上可以按住ALT + A而不發生任何事情(除了視覺上的變化)。 當釋放鍵A(有或沒有ALT)時,button觸發一個ActionEvent。
我發現我可以通過button.getModel()獲取ButtonModel(參見Java 8 API button.getModel() ,然后用model.setPressed(true); model.setArmed(true);按下buttonmodel.setPressed(true); model.setArmed(true); model.setPressed(true); model.setArmed(true); (兩者都通過助記符進行更改),并通過將兩者都設置為false來在視覺上釋放button。 而當model.setPressed(false)在button和布防button被調用時,button會自動觸發一個ActionEvent(調用model.setArmed(false)只會直觀地改變button)。
[來自ButtonModel的Java API文檔的引用]觸發一個button,并觸發一個ActionEvent,當鼠標在模型布防的時候被釋放
為了讓應用程序在button可見時(不包含包含窗口或button需要成為焦點所有者,即當窗口中的另一個組件被聚焦時)響應按鍵,我使用了鍵綁定(參見官方Java教程 )。
工作代碼:按SHIFT + A直觀地按下button(相比之下,在用button.setMnemonic()設置助記符后用鍵按ALT)。 然后釋放鍵以在控制臺上打印動作命令(“button”)。
// MnemonicCode.java import javax.swing.*; import java.awt.event.*; public class MnemonicCode extends JFrame { public MnemonicCode(int keyCode) { JButton button = new JButton("button"); getContentPane().add(button); addMnemonicToButton(button,keyCode); button.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()); } }); pack(); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) throws Exception { MnemonicCode bp = new MnemonicCode(KeyEvent.VK_A); } void addMnemonicToButton(JButton button,int keyCode) { int shiftMask = InputEvent.SHIFT_DOWN_MASK; // signature: getKeyStroke(int keyCode, int modifiers, boolean onKeyRelease) KeyStroke keyPress = KeyStroke.getKeyStroke(keyCode,shiftMask,false); KeyStroke keyReleaseWithShift = KeyStroke.getKeyStroke(keyCode,shiftMask,true); // get maps for key bindings InputMap inputMap = button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap actionMap = button.getActionMap(); // add key bindings for pressing and releasing the button inputMap.put(keyPress,"press"+keyCode); actionMap.put("press"+keyCode, new ButtonPress(button)); inputMap.put(keyReleaseWithShift,"releaseWithShift"+keyCode); actionMap.put("releaseWithShift"+keyCode, new ButtonRelease(button)); ///* // add key binding for releasing SHIFT before A // if you use more than one modifier it gets really messy KeyStroke keyReleaseAfterShift = KeyStroke.getKeyStroke(keyCode,0,true); inputMap.put(keyReleaseAfterShift,"releaseAfterShift"+keyCode); actionMap.put("releaseAfterShift"+keyCode, new ButtonRelease(button)); //*/ } class ButtonPress extends AbstractAction { private JButton button; private ButtonModel model; ButtonPress(JButton button) { this.button = button; this.model = button.getModel(); } public void actionPerformed(ActionEvent e) { // visually press the button model.setPressed(true); model.setArmed(true); button.requestFocusInWindow(); } } class ButtonRelease extends AbstractAction { private ButtonModel model; ButtonRelease(JButton button) { this.model = button.getModel(); } public void actionPerformed(ActionEvent e) { if (model.isPressed()) { // visually release the button // setPressed(false) also makes the button fire an ActionEvent model.setPressed(false); model.setArmed(false); } } } }
總結
以上是生活随笔為你收集整理的java编程button_以编程方式在Java Swing中单击GUIbutton的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 接受java的返回值_java怎样接受
- 下一篇: 下拉加载 实现 java_[Java教程