java界面编程 练习 : 记事本

      花了一天时间写了个记事本,功能不是很完善.功能包括:新建,打开,保存,另保存,退出,剪切,复制,粘贴,删除,日期时间,设置字体,关于帮助等功能.

目前存在的缺陷:

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();
        }
    }
}


3.SetFont类(设置字体窗口)


代码:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值