本文记录了实训课的作业内容,使用 Java Swing 从零创建一个简易记事本。涉及窗口创建、菜单栏组件、快捷键设置、滚动文本域等核心知识点。
一、创建窗口
万事开头难,先来看最基础的窗口创建。使用 JFrame 即可快速创建一个带标题栏、最大化最小化按钮的窗口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import javax.swing.*; import java.awt.*;
public class MyNotePad1 extends JFrame {
public MyNotePad1() { super("简单文本编辑器"); this.setBounds(100, 100, 800, 600); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
public static void main(String[] args) { MyNotePad1 notepad = new MyNotePad1(); notepad.setVisible(true); } }
|
核心知识点:
super("简单文本编辑器") 调用父类构造方法设置窗口标题
setBounds(x, y, width, height) 同时设置窗口位置和大小
setResizable(false) 禁止调整窗口大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 设置关闭按钮的行为
二、添加组件
一个完整的文本编辑器需要菜单栏、菜单和菜单项。这里使用 JMenuBar、JMenu 和 JMenuItem 来构建菜单系统。
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
| private JMenuBar jmenuBar; private JMenu file, edit, style, help; private JMenuItem newFile, openFile, saveFile, saveAsFile, quit; private JMenuItem undo, redo, cut, copy, paste, delete, find, replace, selectAll; private JCheckBoxMenuItem linewrap; private JMenuItem lowToUper, uperToLow, word; private JMenuItem about;
jmenuBar = new JMenuBar();
file = new JMenu("文件(F)"); edit = new JMenu("编辑(E)"); style = new JMenu("格式(S)"); help = new JMenu("帮助(H)");
file.add(newFile); file.add(openFile); file.add(saveFile); file.add(saveAsFile); file.addSeparator(); file.add(quit);
jmenuBar.add(file); jmenuBar.add(edit); jmenuBar.add(style); jmenuBar.add(help);
this.setJMenuBar(jmenuBar);
|
结构图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| JMenuBar (菜单栏) ├── JMenu (文件) │ ├── JMenuItem (新建) │ ├── JMenuItem (打开) │ ├── JMenuItem (保存) │ ├── JMenuItem (另存为) │ ├── Separator │ └── JMenuItem (退出) ├── JMenu (编辑) │ ├── JMenuItem (撤销) │ ├── JMenuItem (恢复) │ └── ... ├── JMenu (格式) │ ├── JCheckBoxMenuItem (自动换行) │ └── ... └── JMenu (帮助) └── JMenuItem (关于)
|
三、设置快捷键
快捷键分为两种:热键 (Mnemonic) 用于通过 Alt + 字母 激活菜单,加速键 (Accelerator) 用于直接触发菜单项操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| file.setMnemonic('F'); edit.setMnemonic('E'); style.setMnemonic('S'); help.setMnemonic('H');
newFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK)); openFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)); saveFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK)); redo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_MASK)); cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK)); copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK)); delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.CTRL_MASK)); find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK)); selectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));
|
注意:旧代码中使用 ActionEvent.CTRL_MASK,新代码建议使用 InputEvent.CTRL_DOWN_MASK。
四、创建带滚动条的文本域
最后一步,添加文本编辑区域。使用 JTextArea 存放文本,配合 JScrollPane 实现滚动功能。
1 2 3 4 5 6 7 8 9
| private JTextArea wen; private JScrollPane js;
wen = new JTextArea(20, 50); wen.setFont(new Font("楷体", Font.PLAIN, 18)); js = new JScrollPane(wen); this.add(js);
|
核心知识点:
JTextArea(rows, columns) 指定文本域的行列数
setFont() 设置字体(字体名、样式、字号)
JScrollPane(textArea) 将文本域包装进滚动面板
this.add(js) 将滚动面板添加到窗口
五、总结
本次实训完成了简易记事本界面的搭建,涉及以下 Java Swing 核心组件:
| 组件 |
用途 |
| JFrame |
窗口容器 |
| JMenuBar |
菜单栏 |
| JMenu |
下拉菜单 |
| JMenuItem / JCheckBoxMenuItem |
菜单项 |
| JTextArea |
多行文本编辑区 |
| JScrollPane |
滚动面板 |
下一步可以继续实现菜单项的功能逻辑,如新建、打开、保存文件,以及编辑功能的实际运作。期待后续完善!