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   zhangmingda  阅读(971)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示