花了一天时间写了个记事本,功能不是很完善.功能包括:新建,打开,保存,另保存,退出,剪切,复制,粘贴,删除,日期时间,设置字体,关于帮助等功能.
目前存在的缺陷:
1.只能打开txt文件
2.保存txt文件,不能按格式保存
3.代码比较冉余,可进一步精简
代码1:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Demo10 extends JFrame{
//新建一个窗体,在窗体上添加菜单栏,工具栏,和选项卡组件,选项卡有两页内容
//一页用于在文本框中显示文件的相关属性,另一页用于在文本框中显示文件内容
//记事本
private JTextArea textArea;
private String line;
private File file;
private int style;
private int size;
public JTextArea getTextArea() {
return textArea;
}
public Demo10(){
final JFrame frame = new JFrame();
frame.setTitle("记事本");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 600, 400);
// getContentPane().setLayout(null);
Container c = getContentPane();
c.setLayout(new BorderLayout());
//文本区域
textArea = new JTextArea(580,338);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setSize(585, 338);
c.add(scrollPane,BorderLayout.CENTER);
//做一个菜单栏
JMenuBar menuBar = new JMenuBar();
JMenu menu_1 = new JMenu("文件");
menu_1.setFont(new java.awt.Font("宋体", Font.PLAIN, 10));
JMenuItem item_1 = new JMenuItem(" 新建");
item_1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(!textArea.getText().trim().equals("")){
Object[] options = {"保存","不保存","取消"};
//执行保存按钮
int n = JOptionPane.showOptionDialog(frame,
"是否进行保存?", "记事本",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
options[2]);
if(n==0){
if(file==null){
//就执行另存为
try {
FileDialog saveFileDialog = new FileDialog(frame, "Sava File As",FileDialog.SAVE);
saveFileDialog.show();
String str1 = saveFileDialog.getDirectory()+saveFileDialog.getFile();
if(str1!=null){
File savaAsFile = new File(str1);//创建一个指定路径的文件
BufferedWriter bufferWrite = new BufferedWriter(new FileWriter(savaAsFile));
String str = textArea.getText();
bufferWrite.write(str);
bufferWrite.flush();
//保存完毕后,需要清空textarea中的数据
textArea.setText("");
}
} catch (Exception e1) {
System.out.println("另保存出错");
}//另存为
}else{//如果存在该文件
//执行保存操作
try {
BufferedWriter bufferWrite = new BufferedWriter(new FileWriter(file));
String str = textArea.getText();
bufferWrite.write(str);
bufferWrite.flush();
//保存完毕后,需要清空textarea中的数据
textArea.setText("");
} catch (Exception e1) {
System.out.println("保存出错,不存在该文件,请点击另保存.");
}
}
}
}
}
});
item_1.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JMenuItem item_2 = new JMenuItem(" 打开");
item_2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
//设置文本过滤器
FileFilter fileFilter = new FileNameExtensionFilter(
"*文本文档(.txt)", "txt");
fileChooser.setFileFilter(fileFilter);
int returnValue = fileChooser.showOpenDialog(getContentPane());
if(returnValue==JFileChooser.APPROVE_OPTION){
file = fileChooser.getSelectedFile();
//将文件中的内容读到textArea
InputStream input;
try {
input = new FileInputStream(file);
InputStreamReader inputReader = new InputStreamReader(input);
BufferedReader bufferReader = new BufferedReader(inputReader);
while((line=bufferReader.readLine())!=null){
textArea.setText(textArea.getText()+"\n"+line);
}
} catch (Exception e1) {
System.out.println("文件不存在");
}
}
}
});
item_2.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JMenuItem item_3 = new JMenuItem(" 保存");
item_3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//如何按格式保存?待解
try {
BufferedWriter bufferWrite = new BufferedWriter(new FileWriter(file));
String str = textArea.getText();
bufferWrite.write(str);
bufferWrite.flush();
} catch (Exception e1) {
System.out.println("保存出错,不存在该文件,请点击另保存.");
}
}
});
item_3.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
menu_1.addSeparator();
JMenuItem item_4 = new JMenuItem(" 另存为");
item_4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
FileDialog saveFileDialog = new FileDialog(frame, "Sava File As",FileDialog.SAVE);
saveFileDialog.show();
String str1 = saveFileDialog.getDirectory()+saveFileDialog.getFile();
if(str1!=null){
File savaAsFile = new File(str1);//创建一个指定路径的文件
BufferedWriter bufferWrite = new BufferedWriter(new FileWriter(savaAsFile));
String str = textArea.getText();
bufferWrite.write(str);
bufferWrite.flush();
}
} catch (Exception e1) {
System.out.println("另保存出错");
}
}
});
item_4.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JMenuItem item_5 = new JMenuItem(" 退出");
item_5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
item_5.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
menu_1.add(item_1);
menu_1.add(item_2);
menu_1.add(item_3);
menu_1.add(item_4);
menu_1.add(item_5);
menuBar.add(menu_1);
JMenu menu_2 = new JMenu("编辑");
menu_2.setFont(new java.awt.Font("宋体", Font.PLAIN, 10));
JMenuItem item_6 = new JMenuItem(" 剪切");
item_6.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.cut();
}
});
item_6.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JMenuItem item_7 = new JMenuItem(" 复制");
item_7.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.copy();
}
});
item_7.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JMenuItem item_8 = new JMenuItem(" 粘贴");
item_8.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.paste();
}
});
item_8.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JMenuItem item_13 = new JMenuItem(" 删除");
item_13.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.replaceSelection("");
}
});
item_13.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JMenuItem item_14 = new JMenuItem(" 全选");
item_14.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.selectAll();
}
});
item_14.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JMenuItem item_10 = new JMenuItem(" 时间/日期");
item_10.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:mm:dd HH:MM:SS");
String date = sdf.format(new Date());
textArea.append(date);
}
});
item_10.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
menu_2.add(item_6);
menu_2.add(item_7);
menu_2.add(item_8);
menu_2.add(item_13);
menu_2.add(item_14);
menu_2.add(item_10);
menuBar.add(menu_2);
JMenu menu_3 = new JMenu("格式");
menu_3.setFont(new java.awt.Font("宋体", Font.PLAIN, 10));
JMenuItem item_12 = new JMenuItem(" 字体(F)");
item_12.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
do_SetFont();
}
});
item_12.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
menu_3.add(item_12);
menuBar.add(menu_3);
JMenu menu_4 = new JMenu("帮助");
menu_4.setFont(new java.awt.Font("宋体", Font.PLAIN, 10));
JMenuItem item_11 = new JMenuItem(" 关于帮助");
item_11.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
do_About();
}
});
item_11.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
menu_4.add(item_11);
menuBar.add(menu_4);
menuBar.setSize(600, 22);
c.add(menuBar,BorderLayout.NORTH);
frame.setContentPane(c);
frame.setVisible(true);
}
//设置字体
protected void do_SetFont() {
SetFont sf = new SetFont(this);
Dimension dlgSize = sf.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
sf.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x+300,
(frmSize.height - dlgSize.height) / 2 + loc.y+250);
sf.setModal(true);
sf.pack();
sf.setVisible(true);
Object object_1 = sf.getBox1Selected();
Object object_2 = sf.getBox2Selected();
Object object_3 = sf.getBox3Selected();
//在点击SetFont按钮确定后设置字体
if(object_2.toString().equals("Font.PLAIN")){
style = 0;
}
if(object_2.toString().equals("Font.BOLD")){
style = 1;
}
if(object_2.toString().equals("Font.ITALIC")){
style = 2;
}
size = Integer.parseInt(object_3.toString());
textArea.setFont(new java.awt.Font(object_1.toString(),style ,size ));
}
protected void do_About() {
About dlg = new About(this);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x+300,
(frmSize.height - dlgSize.height) / 2 + loc.y+250);
dlg.setModal(true);
dlg.pack();
dlg.setVisible(true);
}
public static void main(String[] args) {
new Demo10();
}
}
2.About类(该类显示关于帮助窗口)
代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class About extends JDialog implements ActionListener{
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel insetsPanel1 = new JPanel();
JPanel insetsPanel2 = new JPanel();
JPanel insetsPanel3 = new JPanel();
JButton button1 = new JButton();
JLabel imageLabel = new JLabel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();
JLabel label4 = new JLabel();
ImageIcon image1 = new ImageIcon();
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
FlowLayout flowLayout1 = new FlowLayout();
GridLayout gridLayout1 = new GridLayout();
String product = "";
String version = "1.0";
String copyright = "Copyright (c) 2014";
String comments = "Author tdw ";
public About(Frame parent) {
super(parent);
try {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
public About() {
this(null);
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
image1 = new ImageIcon(getClass().getResource(
"about.png"));
imageLabel.setIcon(image1);
setTitle("About");
panel1.setLayout(borderLayout1);
panel2.setLayout(borderLayout2);
insetsPanel1.setLayout(flowLayout1);
insetsPanel2.setLayout(flowLayout1);
insetsPanel2.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
gridLayout1.setRows(4);
gridLayout1.setColumns(1);
label1.setText(product);
label2.setText(version);
label2.setForeground(Color.PINK);
label3.setText(copyright);
label3.setForeground(Color.PINK);
label4.setText(comments);
label4.setForeground(Color.PINK);
insetsPanel3.setLayout(gridLayout1);
insetsPanel3.setBorder(BorderFactory.createEmptyBorder(10, 60, 10, 10));
button1.setText("OK");
button1.addActionListener(this);
insetsPanel2.add(imageLabel, null);
panel2.add(insetsPanel2, BorderLayout.WEST);
getContentPane().add(panel1, null);
insetsPanel3.add(label1, null);
insetsPanel3.add(label2, null);
insetsPanel3.add(label3, null);
insetsPanel3.add(label4, null);
panel2.add(insetsPanel3, BorderLayout.CENTER);
insetsPanel1.add(button1, null);
panel1.add(insetsPanel1, BorderLayout.SOUTH);
panel1.add(panel2, BorderLayout.NORTH);
setResizable(true);
}
/**
* Close the dialog on a button event.
*
* @param actionEvent ActionEvent
*/
public void actionPerformed(ActionEvent actionEvent) {
if (actionEvent.getSource() == button1) {
dispose();
}
}
}
代码:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class SetFont extends JDialog implements ActionListener{
private JComboBox comboBox1;
private JComboBox comboBox2;
private JComboBox comboBox3;
private JButton button;
private static String[] arr = {"仿宋","宋体","黑体","新宋体","楷书"};
private static String[] arr1 = {"Font.PLAIN","Font.BOLD","Font.ITALIC"};
private static String[] arr2 = {"1","2","4","6","7","8","9","10","11","12","13","14","15","16","17","18"};
public SetFont(Frame parent){
super(parent);
setTitle("字体");
JPanel panel_1 = new JPanel();
panel_1.setSize(200, 100);
JPanel panel_2 = new JPanel();
panel_2.setSize(200, 400);
JPanel panel_3 = new JPanel();
panel_3.setSize(200, 600);
panel_1.setLayout(new GridLayout(2, 3));
panel_2.setLayout(new FlowLayout());
panel_3.setLayout(new BorderLayout());
JLabel label_1 = new JLabel("字体");
label_1.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JLabel label_2 = new JLabel("字形");
label_2.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
JLabel label_3 = new JLabel("大小");
label_3.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
panel_1.add(label_1);
panel_1.add(label_2);
panel_1.add(label_3);
comboBox1 = new JComboBox(arr);
comboBox1.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
comboBox2 = new JComboBox(arr1);
comboBox2.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
comboBox3 = new JComboBox(arr2);
comboBox3.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
panel_1.add(comboBox1);
panel_1.add(comboBox2);
panel_1.add(comboBox3);
button = new JButton("确定");
button.addActionListener(this);
button.setFont(new java.awt.Font("宋体", Font.PLAIN, 11));
panel_2.add(button,BorderLayout.SOUTH);
panel_3.add(panel_1,BorderLayout.NORTH);
panel_3.add(panel_2,BorderLayout.CENTER);
getContentPane().add(panel_3);
setResizable(false);
}
public SetFont(){
this(null);
}
public Object getBox1Selected(){
Object object =comboBox1.getSelectedItem();
for(int i=0;i<arr.length;i++){
if(arr[i].equals(object)){
object = arr[i];
}
}
return object;
}
public Object getBox2Selected(){
Object object =comboBox2.getSelectedItem();
for(int i=0;i<arr1.length;i++){
if(arr1[i].equals(object)){
object = arr1[i];
}
}
return object;
}
public Object getBox3Selected(){
Object object =comboBox3.getSelectedItem();
for(int i=0;i<arr2.length;i++){
if(arr2[i].equals(object)){
object = arr2[i];
}
}
return object;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button){
dispose();
}
}
}
还有一张图片about.png。代码资源: http://download.csdn.net/detail/tan313/8124787