javaGui记事本桌面应用

一个简单的使用Gui组件库的一个记事本java应用。
package 期末;

import javax.swing.*;
import javax.swing.filechooser.*;
import javax.swing.text.*;
import javax.swing.undo.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import java.io.*;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Date;


public class oneman extends JFrame implements ActionListener {

boolean wordWrapEnabled = true; //判断换行功能与按钮是否对应上
boolean stateEnable = true;
UndoManager undoManager; //管理撤销功能的成员变量
int curr;
JTextField NewTextField; //添加一个新的文本框
JTextArea ta;
JDialog gotoDialog;//转到 功能的对话框
JScrollPane jsp;
JMenuItem news;
JMenuItem newWindow;
JMenuItem opens;
JMenuItem saves;
JMenuItem svaeass;
JMenuItem pageSetting;
JMenuItem prints;
JMenuItem exits;


JMenuItem revoke;
JMenuItem shear;
JMenuItem copys;
JMenuItem paste;
JMenuItem delect;
JMenuItem userBingToFind;
JMenuItem search;
JMenuItem FindPrevious;
JMenuItem findNext;
JMenuItem replace;
JMenuItem transferTo;
JMenuItem AllChose;
JMenuItem times;
JCheckBoxMenuItem Automaticlinewrapping;
JMenuItem typeface;
JDialog fontDialog;
JSlider fontSizeSlider;
JMenuItem scale;
JMenuItem statusBar;

public oneman() {
this.setSize(690, 520);
this.setTitle("记事本");
ta = new JTextArea();
ta.setLineWrap(wordWrapEnabled); //设置自动换行 默认关闭
ta.setWrapStyleWord(true); //设置换行不断字
jsp = new JScrollPane(ta);
this.add(jsp);


JMenuBar jMenuBar = new JMenuBar();
this.setJMenuBar(jMenuBar);
this.setVisible(true);


undoManager = new UndoManager();//初始化
ta.getDocument().addUndoableEditListener(undoManager);

JMenu fileMeun = new JMenu("文件(F)");
fileMeun.setMnemonic(KeyEvent.VK_F);
fileMeun.addActionListener(this);
jMenuBar.add(fileMeun);

JMenu eiirMenu = new JMenu("編輯(E)");
eiirMenu.setMnemonic(KeyEvent.VK_E);
eiirMenu.addActionListener(this);
jMenuBar.add(eiirMenu);

JMenu option = new JMenu("格式(O)");
option.setMnemonic(KeyEvent.VK_O);
option.addActionListener(this);
jMenuBar.add(option);

JMenu lookMenu = new JMenu("查看(V)");
lookMenu.setMnemonic(KeyEvent.VK_V);
lookMenu.addActionListener(this);
jMenuBar.add(lookMenu);

JMenu helpMeun = new JMenu("帮助(H)");
helpMeun.setMnemonic(KeyEvent.VK_H);
helpMeun.addActionListener(this);
jMenuBar.add(helpMeun);


news = new JMenuItem("新建(N)");
news.setMnemonic(KeyEvent.VK_N);
news.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
news.addActionListener(this);
fileMeun.add(news);

newWindow = new JMenuItem("新窗口(W)");
newWindow.setMnemonic(KeyEvent.VK_W);
newWindow.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
newWindow.addActionListener(this);
fileMeun.add(newWindow);


opens = new JMenuItem("打开(O)");
opens.setMnemonic(KeyEvent.VK_O);
opens.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
opens.addActionListener(this);
fileMeun.add(opens);

saves = new JMenuItem("保存(S)");
saves.setMnemonic(KeyEvent.VK_S);
saves.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
saves.addActionListener(this);
fileMeun.add(saves);


svaeass = new JMenuItem("另存为(A)");
svaeass.setMnemonic(KeyEvent.VK_A);
svaeass.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
svaeass.addActionListener(this);
fileMeun.add(svaeass);

fileMeun.addSeparator();

pageSetting = new JMenuItem("页面设置(U)");
pageSetting.setMnemonic(KeyEvent.VK_U);
pageSetting.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK));
pageSetting.addActionListener(this);
fileMeun.add(pageSetting);

prints = new JMenuItem("打印(P)");
prints.setMnemonic(KeyEvent.VK_P);
prints.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK));
prints.addActionListener(this);
fileMeun.add(prints);

fileMeun.addSeparator();

exits = new JMenuItem("退出(X)");
exits.addActionListener(this);
fileMeun.add(exits);

//t第2列功能
revoke = new JMenuItem("撤销(U)");
revoke.setMnemonic(KeyEvent.VK_U);
revoke.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
revoke.addActionListener(this);
eiirMenu.add(revoke);


eiirMenu.addSeparator();

shear = new JMenuItem("剪切(T)");
shear.setMnemonic(KeyEvent.VK_T);
shear.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
shear.addActionListener(this);
eiirMenu.add(shear);

copys = new JMenuItem("复制(C)");
copys.setMnemonic(KeyEvent.VK_C);
copys.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
copys.addActionListener(this);
eiirMenu.add(copys);

paste = new JMenuItem("粘贴(P)");
paste.setMnemonic(KeyEvent.VK_P);
paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
paste.addActionListener(this);
eiirMenu.add(paste);

delect = new JMenuItem("删除(L)");
delect.setMnemonic(KeyEvent.VK_L);
delect.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK));
delect.addActionListener(this);
eiirMenu.add(delect);


eiirMenu.addSeparator();

userBingToFind = new JMenuItem("使用bing搜索");
userBingToFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK));
userBingToFind.addActionListener(this);
eiirMenu.add(userBingToFind);


eiirMenu.addSeparator();

search = new JMenuItem("查找(F)");
search.setMnemonic(KeyEvent.VK_F);
search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
search.addActionListener(this);
eiirMenu.add(search);


FindPrevious = new JMenuItem("查找上一个(N)");
FindPrevious.setMnemonic(KeyEvent.VK_N);
FindPrevious.setAccelerator(KeyStroke.getKeyStroke((char) KeyEvent.VK_F3));
FindPrevious.addActionListener(this);
eiirMenu.add(FindPrevious);

findNext = new JMenuItem("查找下一个(V)");
findNext.setMnemonic(KeyEvent.VK_V);
findNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, InputEvent.SHIFT_MASK));
findNext.addActionListener(this);
eiirMenu.add(findNext);

replace = new JMenuItem("替换(R)");
replace.setMnemonic(KeyEvent.VK_R);
replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK));
replace.addActionListener(this);
eiirMenu.add(replace);


transferTo = new JMenuItem("转到(G)");
transferTo.setMnemonic(KeyEvent.VK_G);
transferTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK));
transferTo.addActionListener(this);
eiirMenu.add(transferTo);

eiirMenu.addSeparator();

AllChose = new JMenuItem("全选(A)");
AllChose.setMnemonic(KeyEvent.VK_A);
AllChose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
AllChose.addActionListener(this);
eiirMenu.add(AllChose);


times = new JMenuItem("日期/时间(D)");
times.setMnemonic(KeyEvent.VK_F5);
times.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, InputEvent.CTRL_MASK));
times.addActionListener(this);
eiirMenu.add(times);


// 创建切换按钮
Automaticlinewrapping = new JCheckBoxMenuItem("自动换行(W)");
Automaticlinewrapping.setSelected(wordWrapEnabled);
Automaticlinewrapping.setMnemonic(KeyEvent.VK_W);
Automaticlinewrapping.addActionListener(this);
option.add(Automaticlinewrapping);

typeface = new JMenuItem("字体(F)");
typeface.setMnemonic(KeyEvent.VK_F);
typeface.addActionListener(this);
option.add(typeface);

scale = new JMenuItem("缩放(Z)");
scale.setSelected(stateEnable);
scale.setMnemonic(KeyEvent.VK_Z);
scale.addActionListener(this);
lookMenu.add(scale);

statusBar = new JMenuItem("状态栏(S)");
lookMenu.add(statusBar);

JMenuItem helps = new JMenuItem("查看帮助(H)");
helpMeun.add(helps);
JMenuItem findFeedback = new JMenuItem("发送反馈(F)");
helpMeun.add(findFeedback);
helpMeun.addSeparator();
JMenuItem about = new JMenuItem("关于记事本(A)");
helpMeun.add(about);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}


@Override
public void actionPerformed(ActionEvent actionEvent) {
FileNameExtensionFilter filter = new FileNameExtensionFilter("*.txt", "txt");
if (actionEvent.getSource() == news) {
this.setTitle("无标题 - 记事本");
ta.setText("");
} else if (actionEvent.getSource() == newWindow) { //打开新窗口
oneman om = new oneman();
} else if (actionEvent.getSource() == opens) { //新建功能
JFileChooser fileChooser = new JFileChooser("d:");
fileChooser.setFileFilter(filter);
fileChooser.showOpenDialog(this);
File file = fileChooser.getSelectedFile();
this.setTitle(file.getName() + " - 记事本");
//实现打开文件读取文件内容功能
BufferedReader reader = null;
String str = null;
String[] sum = null;
try {
reader = new BufferedReader(new FileReader(file));
while ((str = reader.readLine()) != null) {
System.out.println(str);
ta.append(str);
}
} catch
(Exception e1) {
e1.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
} else if (actionEvent.getSource() == saves) { //保存功能
JFileChooser fileChooser = new JFileChooser("d:");
fileChooser.setFileFilter(filter);
fileChooser.setDialogTitle("保存");
fileChooser.showSaveDialog(this);
File file = fileChooser.getSelectedFile();
if (file.getName().endsWith(".txt") == false)
file = new File(file.toString() + ".txt");
String str = ta.getText();
//保存
BufferedWriter bw = null;
FileWriter fw = null;
try {
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
System.out.println(str); //查看输入内容是否有问题
System.out.println(file); //查看文件路径
bw.write(str);
bw.newLine();
bw.flush();

} catch (Exception e1) {
e1.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
if (fw != null) {
fw.close();
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
} else if (actionEvent.getSource() == svaeass) { //另存为
JFileChooser fileChooser = new JFileChooser("d:");
fileChooser.setFileFilter(filter);
fileChooser.setDialogTitle("另存为");
fileChooser.showSaveDialog(this);
File file = fileChooser.getSelectedFile();
if (file.getName().endsWith(".txt") == false)
file = new File(file.toString() + ".txt");
String str = ta.getText();
//保存
BufferedWriter bw = null;
FileWriter fw = null;
try {
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
bw.write(str);
bw.newLine();
bw.flush();

} catch (Exception e1) {
e1.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
if (fw != null) {
fw.close();
}
} catch (Exception e1) {
e1.printStackTrace();
}
}


} else if (actionEvent.getSource() == pageSetting) { //页面设置
//添加页面设置对话框
PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printerJob.pageDialog(printerJob.defaultPage());

//将页面设置应用到文本区域中
ta.setFont(new Font("Arial", Font.PLAIN, 12));
ta.setMargin(new Insets(10, 10, 10, 10));

repaint();

} else if (actionEvent.getSource() == prints) { //打印
PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printerJob.pageDialog(printerJob.defaultPage());

//设置打印的内容
Printable printable = new Printable() { //实验打印的方法
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

//设置打印的字体大小
Font font = new Font("Arial", Font.PLAIN, 12);
g2d.setFont(font);

//获取文本的内容
String str = ta.getText();

//将文本内容按行划分
String[] lines = str.split("\\n");

//显示每页的行数
int linehang = (int) (pageFormat.getImageableX() / g2d.getFontMetrics().getHeight());

//当前页面起始行
int stratline = pageIndex * linehang;

//当前页面结束行
int endline = Math.min(stratline + linehang, lines.length); //拿起始页加行数与换行后比较哪个小

//绘制每行文本内容
int y = 0;
for (int i = stratline; i < endline; i++) {
String line = lines[i];
g2d.drawString(line, 0, y);
y += g2d.getFontMetrics().getHeight();
}

return PAGE_EXISTS;
}
};
printerJob.setPrintable(printable, pageFormat);

if (printerJob.printDialog()) {
try {
printerJob.print();
} catch (Exception e1) {
e1.printStackTrace();
}
}

} else if (actionEvent.getSource() == exits) {
System.exit(0);
} else if (actionEvent.getSource() == revoke) { //撤销功能
try {
undoManager.undo();
} catch (Exception e1) {
e1.printStackTrace();
}
} else if (actionEvent.getSource() == shear) { //剪切
ta.cut();
} else if (actionEvent.getSource() == copys) { //复制
ta.copy();
} else if (actionEvent.getSource() == paste) { //粘贴
ta.paste();
} else if (actionEvent.getSource() == delect) { //删除
int stats = ta.getSelectionStart();
int end = ta.getSelectionEnd();
if (stats != end) {
ta.replaceRange("", stats, end); //将中间的内容替换为空,形成删除功能
}
} else if (actionEvent.getSource() == userBingToFind) { //打开bing进行搜索
String site = "https://cn.bing.com/?mkt=zh-CN";
try {
Desktop desktop = Desktop.getDesktop();
if (desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)) {
URI uri = new URI(site);
desktop.browse(uri);
}
} catch (Exception e1){
e1.printStackTrace();
}
} else if (actionEvent.getSource() == search) {

// 创建标签和文本框
JLabel label = new JLabel("Line Number:");
JTextField textField = new JTextField();

// 创建按钮
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 获取用户输入的行数
String lineNumberString = textField.getText();

try {
int lineNumber = Integer.parseInt(lineNumberString);

// 跳转到指定行数
int pos = ta.getLineStartOffset(lineNumber - 1);
ta.setCaretPosition(pos);
} catch (NumberFormatException ex) {
ex.printStackTrace();
} catch (BadLocationException ex) {
ex.printStackTrace();
}

// 关闭对话框
gotoDialog.dispose();
}
});
} else if (actionEvent.getSource() == FindPrevious) { //查找上一个
String text = ta.getText();
String seachString = ta.getSelectedText(); //获取选中的字符
if (seachString != null && !seachString.isEmpty()) {
curr = text.lastIndexOf(seachString, curr - 1);
} else {
JOptionPane.showMessageDialog(null, "Not Found");
}
} else if (actionEvent.getSource() == findNext) { //查找下一个
String text = ta.getText();
String searchString = ta.getSelectedText();
if (searchString != null && !searchString.isEmpty()) {
curr = text.indexOf(searchString, curr + 1);
if (curr >= 0) {
ta.setSelectionStart(curr);
ta.setSelectionEnd(curr + searchString.length());
} else {
JOptionPane.showMessageDialog(null, "Not found");
}
}
} else if (actionEvent.getSource() == replace) { //替换功能
System.out.println("替换" );
String text = ta.getText();
String selectedText = ta.getSelectedText();
String searchString;
if (selectedText != null && !selectedText.isEmpty()) {
searchString = selectedText;
} else {
searchString = JOptionPane.showInputDialog("Find:");
}
if (searchString != null && !searchString.isEmpty()) {
String replaceString = JOptionPane.showInputDialog("请输入替换后的内容:"); //替换后的内容
if (replaceString != null) {
String newText = text.replace(searchString, replaceString);
ta.setText(newText);
}
}
} else if (actionEvent.getSource()== transferTo) {

// 创建对话框
gotoDialog = new JDialog();
gotoDialog.setTitle("转到");
gotoDialog.setSize(300, 150);
gotoDialog.setLocationRelativeTo(null);
gotoDialog.setLayout(new BorderLayout());

// 创建标签和文本框
JLabel label = new JLabel("请输入行号:");
JTextField textField = new JTextField();

// 创建按钮
JButton okButton = new JButton("确定");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 获取用户输入的行数
String lineNumberString = textField.getText();

try {
int lineNumber = Integer.parseInt(lineNumberString);
// 跳转到指定行数 行数为下标-1
int pos = ta.getLineStartOffset(lineNumber - 1);
ta.setCaretPosition(pos); //移动鼠标光标到输入行数处
} catch (NumberFormatException ex) {
ex.printStackTrace();
} catch (BadLocationException ex) {
ex.printStackTrace();
}

// 关闭对话框
gotoDialog.dispose();
}
});

// 添加组件到对话框
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
panel.add(label);
panel.add(textField);
gotoDialog.add(panel, BorderLayout.CENTER);
gotoDialog.add(okButton, BorderLayout.SOUTH);

// 显示对话框
gotoDialog.setVisible(true);
} else if (actionEvent.getSource() == AllChose) {
System.out.println("全选");
ta.selectAll();
String str = ta.getSelectedText();
System.out.println(str);
} else if (actionEvent.getSource()== times) {
System.out.println("时间");
Date da = new Date();
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); //设置日期的格式
String time = ft.format(da); //接收时间
ta.append(time); //将时间输出在内容后面不会覆盖内容
} else if (actionEvent.getSource()== Automaticlinewrapping) { //自动换行
wordWrapEnabled = Automaticlinewrapping.isSelected();
ta.setLineWrap(wordWrapEnabled);
} else if (actionEvent.getSource()==typeface) { //调整字体
fontDialog = new JDialog();
fontDialog.setTitle("字体调整");
fontDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
fontDialog.setSize(300, 200);
fontDialog.setLayout(new FlowLayout());

fontSizeSlider = new JSlider(JSlider.HORIZONTAL, 8, 72, 12); //创建一个滑动条
fontSizeSlider.setMajorTickSpacing(10);
fontSizeSlider.setMinorTickSpacing(2);
fontSizeSlider.setPaintTicks(true);
fontSizeSlider.setPaintLabels(true);

JButton applyButton = new JButton("确认");
applyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { //添加一个判断,判断用户是否确认更改字体大小
int fontSize = fontSizeSlider.getValue();
Font currentFont = ta.getFont(); //获取字体大小
Font newFont = new Font(currentFont.getName(), currentFont.getStyle(), fontSize);
ta.setFont(newFont);
fontDialog.dispose();
}
});
fontDialog.add(fontSizeSlider);
fontDialog.add(applyButton);

// 设置对话框为模态(即禁止与其他窗口的交互)
fontDialog.setModal(true);

// 设置对话框相对于文本区域居中显示
fontDialog.setLocationRelativeTo(ta);

fontDialog.setVisible(true);

}
//缩放功能
else if (actionEvent.getSource()== scale){


}
else if (actionEvent.getSource() == statusBar ){

}
}
public static void main(String[] args) {
oneman oma = new oneman();
}
}

posted on 2023-09-17 15:53  痴土  阅读(60)  评论(0)    收藏  举报