2013-03-21 35 views
0

在我的Java應用程序中,我有一個帶有一些按鈕的JFrame以及一個具有鍵盤快捷鍵的COM組件。當用戶點擊它們時,我需要按鈕來執行這些快捷方式。如何在另一個組件中製作jbutton執行鍵盤筆劃

例如: 應單擊打印按鈕以執行Ctrl + P

我該如何執行此操作?

謝謝。

回答

2

您可以使用Action和鍵綁定。看看這個例子:

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 

import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.KeyStroke; 
import javax.swing.SwingUtilities; 

public class TestKeyBinding { 

    private JFrame frame; 

    public final class PrintAction extends AbstractAction { 

     public PrintAction() { 
      super("Print"); 
     } 

     @Override 
     public final void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(frame, "Perform some printing"); 
     } 
    } 

    protected void initUI() { 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     PrintAction printAction = new PrintAction(); 
     JButton button = new JButton("Print"); 
     button.registerKeyboardAction(printAction, KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK), 
       JComponent.WHEN_IN_FOCUSED_WINDOW); 
     button.setAction(printAction); 
     JComponent comp = new JComponent() { 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(100, 100); 
      } 
     }; 
     frame.add(comp, BorderLayout.NORTH); 
     frame.add(button); 
     frame.setSize(300, 300); 
     frame.setVisible(true); 
     comp.requestFocusInWindow(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new TestKeyBinding().initUI(); 
      } 
     }); 
    } 
} 
+0

@linuxunil了相同的答案:還要考慮'getMenuShortcutKeyMask()',看到[這裏](http://stackoverflow.com/ a/5129757/230513),以改善跨平臺體驗。 – trashgod 2013-03-22 00:53:03

2

打印按鈕應該被點擊進行按Ctrl + P

擊中按Ctrl + P觸發Action(至少,我想你正在使用按鍵綁定)。只需將ActionJButton結合即可。

您不應該嘗試讓按鈕執行一個按鈕Ctrl + P。分享Action,這可以被看作是JButton背後的模式和鍵綁定

+0

+1,得到在同一時間;-) – 2013-03-21 19:10:29