Java给JFrame窗口设置热键的方法实现
作者:盒子box 发布时间:2022-01-24 13:32:20
标签:Java,JFrame,热键
使用了简单的JFrame窗口,在窗口中添加菜单,菜单选项,点击鼠标右键出现右键菜单,用io流将输入文本域的内容保存。并设置热键alt+x为退出的热键
public class MyNotepad extends JFrame{
//菜单栏
private JMenuBar jmb = new JMenuBar();
//菜单
private JMenu jmFile = new JMenu("文件(F)");
private JMenu jmEdit = new JMenu("编辑(E)");
private JMenu jmFormat = new JMenu("格式(O)");
private JMenu jmFind = new JMenu("查看(V)");
private JMenu jmHelp = new JMenu("帮助(H)");
//菜单项
private JMenuItem jmiNew = new JMenuItem("新建");
private JMenuItem jmiOpen = new JMenuItem("打开");
private JMenuItem jmiSave = new JMenuItem("保存");
private JMenuItem jmiOther = new JMenuItem("另存为");
private JMenuItem jmiExit = new JMenuItem("退出(X)");
private JCheckBoxMenuItem jmiAutoLine = new JCheckBoxMenuItem("自动换行");
private JMenuItem jmiFont = new JMenuItem("字体");
private JFileChooser jfc = new JFileChooser();
private JTextArea jta = new JTextArea();
private JScrollPane jsp = new JScrollPane(jta);
//上下文菜单
private JPopupMenu jpm = new JPopupMenu();
private JMenuItem jmiCopy = new JMenuItem("复制");
private JMenuItem jmiPaste = new JMenuItem("粘贴");
public MyNotepad() {
this.setTitle("记事本");
this.setSize(600,400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.add(jmb,BorderLayout.NORTH);
jmb.add(jmFile);
jmb.add(jmEdit);
jmb.add(jmFormat);
jmb.add(jmFind);
jmb.add(jmHelp);
jmFile.add(jmiNew);
jmFile.add(jmiOpen);
jmFile.add(jmiSave);
jmFile.add(jmiOther);
jmFile.addSeparator();
jmFile.add(jmiExit);
jmFormat.add(jmiAutoLine);
jmFormat.add(jmiFont);
//上下文菜单
jpm.add(jmiCopy);
jpm.add(jmiPaste);
jpm.add(jmFile);
jta.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if(e.getButton() == 3){
jpm.show(jta, e.getX(), e.getY());
}
}
});
//文本域自动换行
this.add(jsp,BorderLayout.CENTER);
jmiAutoLine.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
boolean selected = jmiAutoLine.isSelected();
if(selected){
jta.setLineWrap(true);
}else{
jta.setLineWrap(false);
}
}
});
// 文件新建窗口
jmiNew.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int choose = jfc.showOpenDialog(MyNotepad.this);
switch (choose) {
case JFileChooser.APPROVE_OPTION:
System.out.println("点击了打开");
break;
case JFileChooser.CANCEL_OPTION:
System.out.println("点击了取消");
break;
}
}
});
//文件保存窗口,用随机数命名文件名随时保存进新的文件
jmiSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
Random r = new Random();
int a = r.nextInt(100);
File file = new File("D:\\桌面\\b"+"r"+"a.txt");
try {
FileOutputStream fis = new FileOutputStream(file,true);
BufferedOutputStream bis = new BufferedOutputStream(fis);
byte [] b = jta.getText().getBytes();
try {
bis.write(b);
bis.flush();
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
jmiExit.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_X,KeyEvent.ALT_DOWN_MASK),
JComponent.WHEN_IN_FOCUSED_WINDOW);//1.设置监听事件。2.设置热键alt+x关闭窗口3.设置触发当鼠标聚焦在窗口时
jmiExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
this.setVisible(true);
}
public static void main(String[] args) {
new MyNotepad();
}
}
效果如下:
来源:https://blog.csdn.net/weixin_45444295/article/details/107409217


猜你喜欢
- 在Android程序开发中我们经常遇到四种数据存储方式,每种存储方式都各有不同;以下我分别列举了Android开发中的不同存储方式的特点一,
- 1、String类1.1两种对象实例化方式对于String在之前已经学习过了基本使用,就是表示字符串,那么当时使用的形式采取了直接赋值:pu
- 1 自定义类加载器自定义类加载器的代码很简单,只需要继承ClassLoader类,覆写findClass方法即可其默认实现是会抛出一个异常:
- # 前言之前在学习C语言的时候,做过一个三子棋的小游戏,最近开始学习Java,就想着能不能用Java再把之前的练习重新实现一边,既然有这个想
- 1.Action中的validate()方法Struts2提供了一个Validateable接口,这个接口中只存在validat
- 在谈 JVM 内存区域划分之前,我们先来看一下 Java 程序的具体执行过程,我画了一幅图。Java 源代码文件经过编译器编译后生成字节码文
- session简介做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间,一般用于保存用户的会话
- 请求进入DispatcherServlet的doDispatch后,获取HandlerMethod。然后根据HandlerMethod来确认
- *res/raw和assets的相同点:1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。*res/raw和as
- 因为在framework中想添加这个功能,所以写了个appliction来实现一下获取正在运行的应用程序: 还是先看图吧: 这个app主要是
- 一.解析概念StringUtils概念StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提
- 下面将源代码贴出。 public static class ChineseToPinYin { private static readonl
- Spring MVC高级技术包括但不限于web.xml配置、异常处理、跨重定向请求传递数据1、web.xml文件的配置<!DOCTYP
- 开发Android应用中,随着功能越来越多,启动速度越来越慢。有没有办法让自己应用启动速度快一点呢?方法是人想出来的。先说说我的实现方法:1
- AIDL是Android接口定义语言,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个
- 1、UUID类库UUID 根据时间戳实现自动无重复字符串定义// 获取UUIDpublic static UUID randomUUID()
- 前言今天给大家分享是如何在RecyclerView实现全选,ItemTouchHelper实现侧滑删除,拖拽功能。比较基础。关于Recycl
- 问题描述如果直接获取某个json数组中的元素将得到如下的json{ "44": { "height
- mybatis-spring:@MapperScan注解在demo: springboot+mybatis的示例中,dao层接口使用了注解@
- 一般情况下,Redis Client端发出一个请求后,通常会阻塞并等待Redis服务端处理,Redis服务端处理完后请求命令后会将结果通过响