1. 快捷键和助记符
设置Save菜单选项的快捷键为Ctrl+S:
JMenuItem save = new JMenuItem("Save"); save.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.Event.CTRL_MASK));设置File和Save的助记符:
JMenu file = new JMenu("File"); file.setMnemonic('F'); JMenuItem save = new JMenuItem("Save"); save.setMnemonic('S'); // Always use a capital letter file.add(save);
http://docstore.mik.ua/orelly/java-ent/jfc/ch03_08.htm
2. ActionMap()和InputMap()例子
1).
import javax.swing.*; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestBindKey { JFrame jf=new JFrame("测试"); JTextArea ta=new JTextArea(3,30); JButton bt=new JButton("发送"); JTextField tf=new JTextField(15); public void init() { jf.add(ta); JPanel jp=new JPanel(); jp.add(tf); jp.add(bt); jf.add(jp,BorderLayout.SOUTH); AbstractAction sendMsg=new AbstractAction() { public void actionPerformed(ActionEvent e) { ta.append(tf.getText()+"\n"); tf.setText(""); } }; bt.addActionListener(sendMsg); //将Ctrl+Enter键和“send”关联 tf.getInputMap().put(KeyStroke.getKeyStroke('\n',java.awt.event.InputEvent.CTRL_MASK),"send"); //将"send"和sendMsg Action关联 tf.getActionMap().put("send",sendMsg); jf.pack(); jf.setVisible(true); } public static void main(String[] args) { new TestBindKey().init(); System.out.println("ActionMap and InputMap!"); } }
import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.ActionMap; import javax.swing.InputMap; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.text.JTextComponent; public class KeyBinding { public static void main(String[] argv) { JFrame frame = new JFrame(" Adding an InputMap to a Component"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); JTextArea area = new JTextArea(7,10); JScrollPane pane = new JScrollPane(area); InputMap im = area.getInputMap(JComponent.WHEN_FOCUSED); im.put(KeyStroke.getKeyStroke("F2"), "actionName"); ActionMap am = area.getActionMap(); am.put("actionName", new AbstractAction("actionName") { public void actionPerformed(ActionEvent evt) { //System.out.println((JTextComponent) evt.getSource()); System.out.println("action1"+ evt.getID()); } }); im.put(KeyStroke.getKeyStroke("F3"), "actionName2"); am.put("actionName2", new AbstractAction("actionName2") { public void actionPerformed(ActionEvent evt) { //System.out.println((JTextComponent) evt.getSource()); System.out.println("action2"+ evt.toString()); } }); JButton component1 = new JButton("button 1"); JButton component2 = new JButton("button 2"); component1.setInputMap(JComponent.WHEN_FOCUSED, im); component2.setInputMap(JComponent.WHEN_FOCUSED, im); component1.setActionMap(am); component2.setActionMap(am); panel.add(pane); panel.add(component1); panel.add(component2); frame.add(panel); frame.setSize(400,200); frame.setVisible(true); } }
import javax.swing.*; import java.awt.event.*; import javax.swing.text.*; import java.awt.*; public class InputMapComponents{ JFrame frame; JPanel panel; JLabel label; JTextArea area; JScrollPane pane; InputMap map; //ActionMap map; public static void main(String[] args) { InputMapComponents m = new InputMapComponents(); } public InputMapComponents(){ frame = new JFrame(" Adding an InputMap to a Component"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel = new JPanel(); area = new JTextArea(7,10); pane = new JScrollPane(area); map = area.getInputMap(); System.out.println(map); //map = area.getActionMap(); KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK); map.put(key, DefaultEditorKit.cutAction); //map.put(key, action) key = KeyStroke.getKeyStroke(KeyEvent.VK_Y, Event.CTRL_MASK); map.put(key, DefaultEditorKit.copyAction); key = KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK); map.put(key, DefaultEditorKit.pasteAction); key = KeyStroke.getKeyStroke(KeyEvent.VK_L, Event.CTRL_MASK); map.put(key, DefaultEditorKit.backwardAction); key = KeyStroke.getKeyStroke(KeyEvent.VK_R, Event.CTRL_MASK); map.put(key, DefaultEditorKit.forwardAction); key = KeyStroke.getKeyStroke(KeyEvent.VK_U, Event.CTRL_MASK); map.put(key, DefaultEditorKit.upAction); key = KeyStroke.getKeyStroke(KeyEvent.VK_D, Event.CTRL_MASK); map.put(key, DefaultEditorKit.downAction); String lbl = "<html><b>" + "Ctrl+p = paste" + "<br>" + "Ctrl+y = copy" + "<br>" + "Ctrl+c = cut" + "<br>" + "Ctrl+l = cursor shift left one character" + "<br>" + "Ctrl+r = cursor shift right one character" + "<br>" + "Ctrl+u = cursor shift up one line" + "<br>" + "Ctrl+d = cursor shift down one line" + "</b></html>"; JLabel label = new JLabel(lbl); panel.add(pane); panel.add(label); frame.add(panel); frame.setSize(400,200); frame.setVisible(true); } }