java 图形化工具Swing 监听键盘输入字符触发动作getInputMap();getActionMap();
双缓冲技术的介绍:
所有的Swing组件默认启用双缓冲绘图技术。使用双缓冲技术能改进频繁重绘GUI组件的显示效果(避免闪烁现象)JComponent组件默认启用双缓冲,无须自己实现双缓冲。如果想关闭双缓冲,可以在组件上调用setDoubleBuffered(false)方法。同学们无需深究双缓冲技术原理是怎么实现的,就记住有这么个技术就好了。
简单键盘驱动:
所有的Swing组件都提供了简单的键盘驱动。JComponent类提供了getInputMap()和getActionMap()两个方法。
其中
getInputMap()返回一个InputMap对象,该对象用于将 KeyStroke对象(代表键盘或其他类似输入设备的一次输入事件)和名字关联;
getActionMap() 返回一个ActionMap对象,该对象用于将指定名字和Action (Action接口是ActionListener接口的子接口,可作为一个事件监昕器使用)关联,从而可以允许用户通过键盘操作来替代鼠标驱动GUI上的Swing组件,相当于为GUI组件提供快捷键。
示例代码:
/**
* 文本框输入内容绑定事件
*/
jTextField.getInputMap().put(KeyStroke.getKeyStroke('\n'),"send"); // 绑定获取到输入字符为\n即回车键,对应别名为“send"
jTextField.getActionMap().put("send",sendListener); //指定别名对应触发的监听器
/**
完整代码
package swingtest; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.io.FileFilter; /** * @ClassName BindingKeyTest * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/5/8. */ public class BindingKeyTest { public static void main(String[] args) { JFrame jFrame = new JFrame("测试键盘驱动"); /** * 文本框 */ JTextArea jTextArea = new JTextArea(10,60); JScrollPane jScrollPane = new JScrollPane(jTextArea); jFrame.add(jScrollPane); /** * 输入框 和发送按钮 */ JTextField jTextField = new JTextField(50); JButton sendButton = new JButton("发送"); JPanel bottomJPanel = new JPanel(); bottomJPanel.add(jTextField); bottomJPanel.add(sendButton); jFrame.add(bottomJPanel, BorderLayout.SOUTH); /** * 发送按钮或者回车要绑定的事件 */ Action sendListener = new AbstractAction() { @Override public void actionPerformed(ActionEvent actionEvent) { jTextArea.append(jTextField.getText() + "\n"); jTextField.setText(null); } }; //发送按钮绑定事件 sendButton.addActionListener(sendListener); /** * 文本框输入内容绑定事件 */ jTextField.getInputMap().put(KeyStroke.getKeyStroke('\n'),"send"); // 绑定获取到输入字符为\n即回车键,对应别名为“send" jTextField.getActionMap().put("send",sendListener); //指定别名对应触发的监听器 /** * jFrame位置、大小和关闭按钮设置 */ jFrame.setLocation(400,300); jFrame.pack(); jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);; jFrame.setVisible(true); } }
posted on 2021-05-08 22:41 zhangmingda 阅读(955) 评论(0) 编辑 收藏 举报