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 = "" + "Ctrl+p = paste"
+ "
" + "Ctrl+y = copy" +
"
" + "Ctrl+c = cut" + "
"
+ "Ctrl+l = cursor shift left one character"
+ "
" + "Ctrl+r = cursor shift right one character" + "
"
+ "Ctrl+u = cursor shift up one line" + "
"
+ "Ctrl+d = cursor shift down one line" + "";
JLabel label = new JLabel(lbl);
panel.add(pane);
panel.add(label);
frame.add(panel);
frame.setSize(400,200);
frame.setVisible(true);
}
}