1、 请编写一个Java程序实现如下图所示的“我的记事本”窗口(TextEditor),窗口中包括一个菜单栏(JMenuBar),其中有三个菜单(JMenu),分别是文件菜单、编辑菜单和查看菜单,窗口的主体部分是一个可编辑区域,用到了多行多列的文本框(JTextArea)和滚动条面板(JScrollPane):
时间: 2024-01-15 12:05:10 浏览: 80
用java写的记事本程序
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TextEditor extends JFrame implements ActionListener {
private JTextArea textArea;
private JScrollPane scrollPane;
public TextEditor() {
setTitle("我的记事本");
// 创建菜单栏
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
// 创建文件菜单
JMenu fileMenu = new JMenu("文件(F)");
fileMenu.setMnemonic('F');
menuBar.add(fileMenu);
// 创建文件菜单项
JMenuItem newMenuItem = new JMenuItem("新建(N)");
newMenuItem.setMnemonic('N');
newMenuItem.addActionListener(this);
fileMenu.add(newMenuItem);
JMenuItem openMenuItem = new JMenuItem("打开(O)");
openMenuItem.setMnemonic('O');
openMenuItem.addActionListener(this);
fileMenu.add(openMenuItem);
JMenuItem saveMenuItem = new JMenuItem("保存(S)");
saveMenuItem.setMnemonic('S');
saveMenuItem.addActionListener(this);
fileMenu.add(saveMenuItem);
JMenuItem exitMenuItem = new JMenuItem("退出(X)");
exitMenuItem.setMnemonic('X');
exitMenuItem.addActionListener(this);
fileMenu.add(exitMenuItem);
// 创建编辑菜单
JMenu editMenu = new JMenu("编辑(E)");
editMenu.setMnemonic('E');
menuBar.add(editMenu);
// 创建编辑菜单项
JMenuItem undoMenuItem = new JMenuItem("撤销(U)");
undoMenuItem.setMnemonic('U');
undoMenuItem.addActionListener(this);
editMenu.add(undoMenuItem);
JMenuItem cutMenuItem = new JMenuItem("剪切(T)");
cutMenuItem.setMnemonic('T');
cutMenuItem.addActionListener(this);
editMenu.add(cutMenuItem);
JMenuItem copyMenuItem = new JMenuItem("复制(C)");
copyMenuItem.setMnemonic('C');
copyMenuItem.addActionListener(this);
editMenu.add(copyMenuItem);
JMenuItem pasteMenuItem = new JMenuItem("粘贴(P)");
pasteMenuItem.setMnemonic('P');
pasteMenuItem.addActionListener(this);
editMenu.add(pasteMenuItem);
// 创建查看菜单
JMenu viewMenu = new JMenu("查看(V)");
viewMenu.setMnemonic('V');
menuBar.add(viewMenu);
// 创建查看菜单项
JMenuItem zoomInMenuItem = new JMenuItem("放大(Z)");
zoomInMenuItem.setMnemonic('Z');
zoomInMenuItem.addActionListener(this);
viewMenu.add(zoomInMenuItem);
JMenuItem zoomOutMenuItem = new JMenuItem("缩小(O)");
zoomOutMenuItem.setMnemonic('O');
zoomOutMenuItem.addActionListener(this);
viewMenu.add(zoomOutMenuItem);
JMenuItem restoreMenuItem = new JMenuItem("恢复默认大小(R)");
restoreMenuItem.setMnemonic('R');
restoreMenuItem.addActionListener(this);
viewMenu.add(restoreMenuItem);
// 创建文本编辑区域
textArea = new JTextArea(20, 40);
textArea.setFont(new Font("宋体", Font.PLAIN, 16));
textArea.setLineWrap(true); // 自动换行
textArea.setWrapStyleWord(true); // 按单词换行
// 创建滚动条面板
scrollPane = new JScrollPane(textArea);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
// 添加文本编辑区域到窗口中
add(scrollPane);
// 设置窗口大小、位置、可见性等属性
setSize(600, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// 处理菜单项的点击事件
String command = e.getActionCommand();
switch (command) {
case "新建(N)":
textArea.setText("");
setTitle("我的记事本");
break;
case "打开(O)":
JFileChooser openFileChooser = new JFileChooser();
int result = openFileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
String filePath = openFileChooser.getSelectedFile().getAbsolutePath();
setTitle(filePath + " - 我的记事本");
}
break;
case "保存(S)":
JFileChooser saveFileChooser = new JFileChooser();
int saveResult = saveFileChooser.showSaveDialog(this);
if (saveResult == JFileChooser.APPROVE_OPTION) {
String filePath = saveFileChooser.getSelectedFile().getAbsolutePath();
setTitle(filePath + " - 我的记事本");
}
break;
case "退出(X)":
System.exit(0);
break;
case "撤销(U)":
textArea.undo();
break;
case "剪切(T)":
textArea.cut();
break;
case "复制(C)":
textArea.copy();
break;
case "粘贴(P)":
textArea.paste();
break;
case "放大(Z)":
Font currentFont = textArea.getFont();
int currentSize = currentFont.getSize();
if (currentSize < 36) {
textArea.setFont(new Font(currentFont.getFontName(), currentFont.getStyle(), currentSize + 1));
}
break;
case "缩小(O)":
Font currentFont2 = textArea.getFont();
int currentSize2 = currentFont2.getSize();
if (currentSize2 > 8) {
textArea.setFont(new Font(currentFont2.getFontName(), currentFont2.getStyle(), currentSize2 - 1));
}
break;
case "恢复默认大小(R)":
textArea.setFont(new Font("宋体", Font.PLAIN, 16));
break;
}
}
public static void main(String[] args) {
new TextEditor();
}
}
```
阅读全文