Java Swing快捷鍵和按鍵繫結
阿新 • • 發佈:2019-02-14
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!"); } }
2).
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); } }
3).
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);
}
}