您的位置:首页 > 编程语言 > Java开发

程序—java记事本

2017-01-03 16:34 253 查看

功能实现

界面功能介绍

文件:
新建:清空文件,如果曾经打开了一个文件的话,就不对源文件内容进行覆盖打开:打开文件浏览器,添加一个.txt文件保存:用新内容将原文件覆盖掉另存为:保存到一个新的目录退出:退出程序编辑:
复制:将选中的文本用一个变量进行保存剪切:复制后删除粘贴:将复制后的文本粘贴到光标位置,如果鼠标选中了一段文字后粘贴,会将选中文字进行覆盖删除:删除选中文字查找:打开一个新的面板,在里面可以进行查找操作替换:打开一个面板,可以进行查找操作,在查找到之后可以对选中的文本进行替换操作字体:
加粗
倾斜
Color:
blackredbluegreenothers:打开颜色选择器

源码分析

文件:
先声明一个变量
private JTextArea write; //作为编辑的文本框
private File cFile; //作为打开文件时保存文件的变量

打开:打开文件浏览器,添加一个.txt文件
JMenuItem open = new JMenuItem("打开");
JFileChooser chooser = new JFileChooser();
open.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int value = chooser.showOpenDialog(Main.this);
try {
if (value == JFileChooser.APPROVE_OPTION) {
chooser.setFileFilter(new FileNameExtensionFilter("可选文件", "txt"));
cFile = chooser.getSelectedFile();
BufferedReader br = new BufferedReader(new FileReader(cFile));
String thisLine;
write.setText("");
while ((thisLine = br.readLine()) != null) {
write.append(thisLine + "\r\n");
}
br.close();
}
} catch (Exception e2) {
System.err.println("open " + e2);
}

}

});


保存:用新内容将原文件覆盖掉
JMenuItem save = new JMenuItem("保存");
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if (cFile == null) {
return;
} else {
BufferedWriter bw = new BufferedWriter(new FileWriter(cFile));
bw.write(write.getText());
bw.close();
}
} catch (Exception e2) {
System.err.println("save " + e);
}
}
});


另存为:保存到一个新的目录
JMenuItem saveToNewPlace = new JMenuItem("另存为");
saveToNewPlace.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int value = chooser.showSaveDialog(Main.this);
try {
if (value == JFileChooser.APPROVE_OPTION) {
cFile = null;
File file = chooser.getSelectedFile();
if (file.exists() == false) {
file.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(write.getText());
bw.close();
}
} catch (Exception e2) {
System.err.println("saveToNew " + e);
}

}
});


退出:退出程序
JMenuItem out = new JMenuItem("退出");
out.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});


编辑:
声明变量;
private String copyText;//复制时暂存文本
private int start;//用户光标前面的位置
private int end;//用户光标后面的位置

复制:将选中的文本用一个变量进行保存
JMenuItem copy = new JMenuItem("复制");
copy.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
copy();
}
});
private void copy(){
copyText = write.getSelectedText();
}


剪切:复制后删除
JMenuItem deleteAndCopy = new JMenuItem("剪切");
deleteAndCopy.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (write.getSelectedText() != null) {
copyText = write.getSelectedText();
delete();
}
}
});
粘贴:将复制后的文本粘贴到光标位置,如果鼠标选中了一段文字后粘贴,会将选中文字进行覆盖
JMenuItem zhan = new JMenuItem("粘贴");
zhan.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
zhan();
}
});
private void zhan(){
if (copyText != null) {
StringBuffer sb = new StringBuffer(write.getText().toString());
String s1 = sb.substring(0, write.getSelectionStart());
String s2 = sb.substring(write.getSelectionEnd());
write.setText(s1);
write.append(copyText);
write.append(s2);
}
}


删除:删除选中文字
JMenuItem delete= new JMenuItem("删除");
delete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
delete();
}
});
private void delete(){
if (write.getSelectedText() != null) {
StringBuffer sb = new StringBuffer(write.getText().toString());
String s1 = sb.substring(0, write.getSelectionStart());
String s2 = sb.substring(write.getSelectionEnd());
write.setText(s1);
write.append(s2);
}
}


查找:打开一个新的面板,在里面可以进行查找操作
JMenuItem find = new JMenuItem("查找");
find.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
find();
}
});
private void find(){
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Find frame = new Find();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}


替换:打开一个面板,可以进行查找操作,在查找到之后可以对选中的文本进行替换操作
JMenuItem replace = new JMenuItem("替换");
replace.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
replace();
}
});
private void replace(){
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Replace frame = new Replace();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}


字体:
加粗
倾斜
JCheckBoxMenuItem blod = new JCheckBoxMenuItem("Blod");
JCheckBoxMenuItem italic = new JCheckBoxMenuItem("italic");
blod.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (blod.isSelected()) {
if (italic.isSelected()) {
write.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 20));
} else {
write.setFont(new Font("Arial", Font.BOLD, 20));
}
} else {
if (italic.isSelected()) {
write.setFont(new Font("Arial", Font.ITALIC, 20));
} else {
write.setFont(new Font("Arial", Font.PLAIN, 20));
}
}
}
});

italic.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (italic.isSelected()) {
if (blod.isSelected()) {
write.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 20));
}else {
write.setFont(new Font("Arial", Font.ITALIC, 20));
}
} else {
if (blod.isSelected()) {
write.setFont(new Font("Arial", Font.BOLD, 20));
}else {
write.setFont(new Font("Arial", Font.PLAIN, 20));
}
}
}
});


Color:

black
JRadioButtonMenuItem black = new JRadioButtonMenuItem("black");
black.setSelected(true);
black.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
write.setForeground(Color.black); //其他的几种颜色只需要改着一行代码就行
}
});
redbluegreenothers:打开颜色选择器
JMenuItem other = new JMenuItem("others...");
other.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JColorChooser jc = new JColorChooser(write.getForeground());
Color be = write.getForeground();
Color co = write.getForeground();
co = jc.showDialog(null, "请选择颜色", co);
if (co == null) {
write.setForeground(be);
} else {
bg.clearSelection();
write.setForeground(co);
}
}
});


成品图片

整体外观:



一部分界面:










替换的窗口:



查找的窗口:




全部代码

整体描述
为了方便,代码中将查找和删除的界面全部做成了内部类有部分代码出现了复制粘贴的情况,因此这个版本并不出彩,希望大家进行改进

全篇代码
package note2;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JScrollPane;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.event.CaretEvent;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

public class Main extends JFrame {
private JTextArea write;
private File cFile;
private String copyText;
private int start;
private int end;
public Main() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 927, 1090);
JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);

JMenuBar menuBar = new JMenuBar();
scrollPane.setColumnHeaderView(menuBar);

JMenu fileMenu = new JMenu("文件");
menuBar.add(fileMenu);

JMenuItem open = new JMenuItem("打开"); JFileChooser chooser = new JFileChooser(); open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); int value = chooser.showOpenDialog(Main.this); try { if (value == JFileChooser.APPROVE_OPTION) { chooser.setFileFilter(new FileNameExtensionFilter("可选文件", "txt")); cFile = chooser.getSelectedFile(); BufferedReader br = new BufferedReader(new FileReader(cFile)); String thisLine; write.setText(""); while ((thisLine = br.readLine()) != null) { write.append(thisLine + "\r\n"); } br.close(); } } catch (Exception e2) { System.err.println("open " + e2); } } });

JMenuItem newfile = new JMenuItem("新建");
newfile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cFile = null;
write.setText("");
}
});
fileMenu.add(newfile);
fileMenu.add(open);

JMenuItem save = new JMenuItem("保存"); save.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { if (cFile == null) { return; } else { BufferedWriter bw = new BufferedWriter(new FileWriter(cFile)); bw.write(write.getText()); bw.close(); } } catch (Exception e2) { System.err.println("save " + e); } } });
fileMenu.add(save);

JMenuItem saveToNewPlace = new JMenuItem("另存为"); saveToNewPlace.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int value = chooser.showSaveDialog(Main.this); try { if (value == JFileChooser.APPROVE_OPTION) { cFile = null; File file = chooser.getSelectedFile(); if (file.exists() == false) { file.createNewFile(); } BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(write.getText()); bw.close(); } } catch (Exception e2) { System.err.println("saveToNew " + e); } } });
fileMenu.add(saveToNewPlace);

JMenuItem out = new JMenuItem("退出"); out.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } });
fileMenu.add(out);

JMenu editMenu = new JMenu("编辑");
menuBar.add(editMenu);

JMenuItem copy = new JMenuItem("复制"); copy.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { copy(); } });
editMenu.add(copy);

JMenuItem deleteAndCopy = new JMenuItem("剪切"); deleteAndCopy.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (write.getSelectedText() != null) { copyText = write.getSelectedText(); delete(); } } });
editMenu.add(deleteAndCopy);

JMenuItem zhan = new JMenuItem("粘贴"); zhan.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { zhan(); } });
editMenu.add(zhan);

JMenuItem delete= new JMenuItem("删除"); delete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { delete(); } });
editMenu.add(delete);

JMenuItem find = new JMenuItem("查找"); find.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { find(); } });
editMenu.add(find);

JMenuItem replace = new JMenuItem("替换"); replace.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { replace(); } });
editMenu.add(replace);

JMenu textStyle = new JMenu("字体");
editMenu.add(textStyle);

JCheckBoxMenuItem blod = new JCheckBoxMenuItem("Blod");
JCheckBoxMenuItem italic = new JCheckBoxMenuItem("italic");
blod.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (blod.isSelected()) {
if (italic.isSelected()) {
write.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 20));
} else {
write.setFont(new Font("Arial", Font.BOLD, 20));
}
} else {
if (italic.isSelected()) {
write.setFont(new Font("Arial", Font.ITALIC, 20));
} else {
write.setFont(new Font("Arial", Font.PLAIN, 20));
}
}
}
});
textStyle.add(blod);

italic.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (italic.isSelected()) {
if (blod.isSelected()) {
write.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 20));
}else {
write.setFont(new Font("Arial", Font.ITALIC, 20));
}
} else {
if (blod.isSelected()) {
write.setFont(new Font("Arial", Font.BOLD, 20));
}else {
write.setFont(new Font("Arial", Font.PLAIN, 20));
}
}
}
});
textStyle.add(italic);

JMenu color = new JMenu("Color");
menuBar.add(color);

ButtonGroup bg = new ButtonGroup();

JRadioButtonMenuItem black = new JRadioButtonMenuItem("black");
black.setSelected(true);
black.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
write.setForeground(Color.black);
}
});
color.add(black);

JRadioButtonMenuItem red = new JRadioButtonMenuItem("red");
red.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
write.setForeground(Color.red);
}
});
color.add(red);

JRadioButtonMenuItem blue = new JRadioButtonMenuItem("blue");
blue.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
write.setForeground(Color.blue);
}
});
color.add(blue);

JRadioButtonMenuItem green = new JRadioButtonMenuItem("green");
green.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
write.setForeground(Color.green);
}
});
color.add(green);
bg.add(red);
bg.add(green);
bg.add(blue);
bg.add(black);

JMenuItem other = new JMenuItem("others..."); other.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JColorChooser jc = new JColorChooser(write.getForeground()); Color be = write.getForeground(); Color co = write.getForeground(); co = jc.showDialog(null, "请选择颜色", co); if (co == null) { write.setForeground(be); } else { bg.clearSelection(); write.setForeground(co); } } });

color.add(other);

JScrollPane text = new JScrollPane();
scrollPane.setViewportView(text);

write = new JTextArea();
write.setFont(new Font("Arial", Font.PLAIN, 20));
text.setViewportView(write);
}

public void CaretUpdate(CaretEvent e) {
start = e.getDot();
end = e.getMark();
int temp = start;
if (start > end) {
start = end;
end = temp;
}
}

private void copy(){ copyText = write.getSelectedText(); }

private void zhan(){ if (copyText != null) { StringBuffer sb = new StringBuffer(write.getText().toString()); String s1 = sb.substring(0, write.getSelectionStart()); String s2 = sb.substring(write.getSelectionEnd()); write.setText(s1); write.append(copyText); write.append(s2); } }

private void delete(){ if (write.getSelectedText() != null) { StringBuffer sb = new StringBuffer(write.getText().toString()); String s1 = sb.substring(0, write.getSelectionStart()); String s2 = sb.substring(write.getSelectionEnd()); write.setText(s1); write.append(s2); } }

private void find(){ EventQueue.invokeLater(new Runnable() { public void run() { try { Find frame = new Find(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); }

private void replace(){ EventQueue.invokeLater(new Runnable() { public void run() { try { Replace frame = new Replace(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); }

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

class Find extends JFrame {

private JPanel contentPane;
private JTextField textField;
private boolean isDown;
private int start;
private int last;
/**
* Create the frame.
*/
public Find() {
setResizable(false);
setAlwaysOnTop(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 650, 250);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

ButtonGroup bg = new ButtonGroup();
JRadioButton up = new JRadioButton("向上");
up.setBounds(159, 99, 177, 29);
contentPane.add(up);
bg.add(up);

JRadioButton down = new JRadioButton("向下");
down.setSelected(true);
isDown = true;
down.setBounds(159, 137, 177, 29);
contentPane.add(down);
bg.add(down);

textField = new JTextField();
textField.setBounds(97, 45, 345, 27);
contentPane.add(textField);
textField.setColumns(10);

down.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (down.isSelected()) {
isDown = true;
} else {
isDown = false;
}
}
});

JButton search = new JButton("查找");
search.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) {
start = write.getSelectionStart();
last = write.getSelectionEnd();
}
if (isDown == true) {
String text = textField.getText().toString();
start = write.getText().toString().indexOf(text, last);
if (start != -1) {
write.setSelectionStart(start);
write.setSelectionEnd(start + text.length());
}
}else{
String text = textField.getText().toString();
start = write.getText().toString().lastIndexOf(text,start-1);
if (start != -1) {
write.setSelectionStart(start);
write.setSelectionEnd(start+text.length());
}
}
}
});
search.setBounds(466, 44, 123, 29);
contentPane.add(search);
}
}

class Replace extends JFrame {

private JPanel contentPane;
private JTextField target;
private JTextField retext;
private boolean isDown;
private int start;
private int last;

public Replace() {
System.out.println("replace");
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 650, 250);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
isDown = true;

JButton findNext = new JButton("查找下一个");
findNext.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) {
start = write.getSelectionStart();
last = write.getSelectionEnd();
}
if (isDown == true) {
String text = target.getText().toString();
start = write.getText().toString().indexOf(text, last);
if (start != -1) {
write.setSelectionStart(start);
write.setSelectionEnd(start + text.length());
}
}else{
String text = target.getText().toString();
start = write.getText().toString().lastIndexOf(text,start-1);
if (start != -1) {
write.setSelectionStart(start);
write.setSelectionEnd(start+text.length());
}
}
}
});
findNext.setBounds(441, 50, 123, 29);
contentPane.add(findNext);

JButton replace = new JButton("替换");
replace.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try{
if (write.getSelectedText().toString().equals(target.getText().toString())) {
System.out.println("pipei");
StringBuffer sb = new StringBuffer(write.getText().toString());
String s1 = sb.substring(0, write.getSelectionStart());
String s2 = sb.substring(write.getSelectionEnd());
write.setText(s1);
write.append(retext.getText().toString());
write.append(s2);
}
}catch (Exception sd) {
}
}
});
replace.setBounds(441, 109, 123, 29);
contentPane.add(replace);

target = new JTextField();
target.setBounds(110, 51, 290, 27);
contentPane.add(target);
target.setColumns(10);

JLabel li = new JLabel("目标文字");
li.setBounds(14, 54, 81, 21);
contentPane.add(li);

JLabel li2 = new JLabel("替换文字");
li2.setBounds(14, 113, 81, 21);
contentPane.add(li2);

retext = new JTextField();
retext.setBounds(110, 110, 290, 27);
contentPane.add(retext);
retext.setColumns(10);
ButtonGroup bg = new ButtonGroup();
JRadioButton up = new JRadioButton("向上");
up.setBounds(113, 170, 81, 29);
contentPane.add(up);

JRadioButton down = new JRadioButton("向下");
down.setSelected(true);
down.setBounds(219, 170, 88, 29);
contentPane.add(down);
bg.add(up);
bg.add(down);
down.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (down.isSelected()) {
isDown = true;
}else{
isDown = false;
}
}
});
JButton replaceall = new JButton("全部替换");
replaceall.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) {
start = write.getSelectionStart();
last = write.getSelectionEnd();
}
try{
if (write.getSelectedText().toString().equals(target.getText().toString())) {
System.out.println("pipei");
StringBuffer sb = new StringBuffer(write.getText().toString());
String s1 = sb.substring(0, write.getSelectionStart());
String s2 = sb.substring(write.getSelectionEnd());
write.setText(s1);
write.append(retext.getText().toString());
write.append(s2);
}
}catch (Exception sd) {
}
while(start != -1){
System.out.println("ahah");
if (isDown == true) {
String text = target.getText().toString();
start = write.getText().toString().indexOf(text, last);
if (start != -1) {
write.setSelectionStart(start);
write.setSelectionEnd(start + text.length());
}
}else{
String text = target.getText().toString();
start = write.getText().toString().lastIndexOf(text,start-1);
if (start != -1) {
write.setSelectionStart(start);
write.setSelectionEnd(start+text.length());
}
}
try{
if (write.getSelectedText().toString().equals(target.getText().toString())) {
System.out.println("pipei");
StringBuffer sb = new StringBuffer(write.getText().toString());
String s1 = sb.substring(0, write.getSelectionStart());
String s2 = sb.substring(write.getSelectionEnd());
write.setText(s1);
write.append(retext.getText().toString());
write.append(s2);
}
}catch (Exception sd) {
}
}
}
});
replaceall.setBounds(441, 170, 123, 29);
contentPane.add(replaceall);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: