在我的Java應用程序中,我有一個帶有一些按鈕的JFrame
以及一個具有鍵盤快捷鍵的COM組件。當用戶點擊它們時,我需要按鈕來執行這些快捷方式。如何在另一個組件中製作jbutton執行鍵盤筆劃
例如: 應單擊打印按鈕以執行Ctrl + P。
我該如何執行此操作?
謝謝。
在我的Java應用程序中,我有一個帶有一些按鈕的JFrame
以及一個具有鍵盤快捷鍵的COM組件。當用戶點擊它們時,我需要按鈕來執行這些快捷方式。如何在另一個組件中製作jbutton執行鍵盤筆劃
例如: 應單擊打印按鈕以執行Ctrl + P。
我該如何執行此操作?
謝謝。
您可以使用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();
}
});
}
}
打印按鈕應該被點擊進行按Ctrl + P
擊中按Ctrl + P觸發Action
(至少,我想你正在使用按鍵綁定)。只需將Action
與JButton
結合即可。
您不應該嘗試讓按鈕執行一個按鈕Ctrl + P。分享Action
,這可以被看作是JButton
背後的模式和鍵綁定
+1,得到在同一時間;-) – 2013-03-21 19:10:29
@linuxunil了相同的答案:還要考慮'getMenuShortcutKeyMask()',看到[這裏](http://stackoverflow.com/ a/5129757/230513),以改善跨平臺體驗。 – trashgod 2013-03-22 00:53:03