以上是记事本的整个框架,我以后可以看着这个框架想起我的记事本内容。本记事本肯定是对的,为什么要强调这么一句呢?因为我看的那本参考书上的代码是不对的!
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
public class JNotePadUI extends JFrame
{
private JMenuItem menuOpen;
private JMenuItem menuSave;
private JMenuItem menuSaveAs;
private JMenuItem menuClose;
private JMenu editMenu;
private JMenuItem menuCut;
private JMenuItem menuCopy;
private JMenuItem menuPaste;
private JMenuItem menuAbout;
private JLabel stateBar;
private JTextArea textArea;
private JFileChooser fileChooser;
private JPopupMenu popUpMenu;//弹出式菜单
public JNotePadUI(){
super("新建文本文件");
setUpUIComponent();
setUpEventListener();
setVisible(true);
}
private void setUpUIComponent(){
setSize(640,480);
JMenuBar menuBar=new JMenuBar();
JMenu fileMenu=new JMenu("文件");
menuOpen = new JMenuItem("打开");
menuOpen.setAccelerator(KeyStroke.getKeyStroke
(KeyEvent.VK_O,InputEvent.CTRL_MASK));
menuSave = new JMenuItem("保存");
menuSave.setAccelerator(KeyStroke.getKeyStroke
(KeyEvent.VK_S,InputEvent.CTRL_MASK));
menuSaveAs = new JMenuItem("另存为");
menuClose = new JMenuItem("关闭");
menuClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
fileMenu.add(menuOpen);
fileMenu.addSeparator();
fileMenu.add(menuSave);
fileMenu.add(menuSaveAs);
fileMenu.addSeparator();
fileMenu.add(menuClose);
//设置“编辑”菜单
editMenu =new JMenu("编辑");
popUpMenu=editMenu.getPopupMenu();
menuCut= new JMenuItem("剪切");
menuCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
menuCopy= new JMenuItem("复制");
menuCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
menuPaste= new JMenuItem("粘贴");
menuPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
editMenu.add(menuCut);
editMenu.add(menuCopy);
editMenu.add(menuPaste);
//关于菜单的添加
JMenu aboutMenu = new JMenu("关于");
menuAbout=new JMenuItem("关于哈哈");
aboutMenu.add(menuAbout);
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(aboutMenu);
setJMenuBar(menuBar);
//文字编辑区域
textArea=new JTextArea();
textArea.setFont(new Font("宋体",Font.PLAIN,16));
textArea.setLineWrap(true);//自动换行
JScrollPane panel= new JScrollPane(textArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
Container contentPane=this.getContentPane();//初始化一个容器,用来在容器上添加一些组件。
contentPane.add(panel,BorderLayout.CENTER);//BorderLayout将屏幕分为east west center south north
//五部分中间部分可以改变,其余四块宽度不变
//状态栏
stateBar = new JLabel("未修改");
stateBar.setHorizontalAlignment(SwingConstants.LEFT);//状态栏的字在左边
stateBar.setBorder(BorderFactory.createEtchedBorder());//设置状态栏的边框
contentPane.add(stateBar,BorderLayout.SOUTH);//设置状态栏的位置/
}
private void setUpEventListener(){
//单击窗口关闭按钮事件处理
addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){closeFile();
}
}
);
//菜单-打开
menuOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openFile();
}
});
//菜单-保存
menuSave.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
saveFile();
}
}
);
//菜单-另存为
menuSaveAs.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
saveFileAs();
}
}
);
//菜单-关闭文件
menuClose.addActionListener(
new ActionListener (){
public void actionPerformed(ActionEvent e){
closeFile();
}
}
);
//菜单-剪切
menuCut.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
cut();
}
}
);
//菜单-复制
menuCopy.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
copy();
}
}
);
//菜单-粘贴
menuPaste.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
paste();
}
}
);
//菜单-关于
menuAbout.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
//显示对话框
JOptionPane.showOptionDialog(null,
"nihao","dajiahao",
JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null, null, null);
}
}
);
//编辑区键盘事件
textArea.addKeyListener(
new KeyAdapter(){
public void keyTyped(KeyEvent e){
processTextArea();
}
}
);
//编辑区鼠标事件
textArea.addMouseListener(
new MouseAdapter(){
public void mouseReleased(MouseEvent e){
if (e.getButton()==MouseEvent.BUTTON3)
popUpMenu.show(editMenu,e.getX(),e.getY());//右击后弹出框
}
public void mouseCliked(MouseEvent e){
if (e.getButton()==MouseEvent.BUTTON1)
popUpMenu.setVisible(false);//左击后弹出框隐藏
}
}
);
}
private void openFile(){
if (isCurrentFileSaved()){
open();
}
else{
int option = JOptionPane.showConfirmDialog(null, "文件已修改,是否保存?",
"文件保存?", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE,null);
switch(option){
case JOptionPane.YES_NO_OPTION:
saveFile();
break;
case JOptionPane.NO_OPTION:
open();
break;
}
}
}
private void saveFile(){
File file=new File(getTitle());
if (!file.exists()){
saveFileAs();
}
else{
try{//打开指定的文件
BufferedWriter buf = new BufferedWriter(new FileWriter(file));
buf.write(textArea.getText());
buf.close();
//设定状态栏为未修改
stateBar.setText("未修改");
}
catch (IOException e){
JOptionPane.showMessageDialog(null, e.toString(),
"写入文件失败",JOptionPane.ERROR_MESSAGE);
}
}
}
private void saveFileAs(){
int option=fileChooser.showDialog(null, null);
if (option==JFileChooser.APPROVE_OPTION){
File file =fileChooser.getSelectedFile();
setTitle(file.toString());
try{
file.createNewFile();
saveFile();
}
catch (IOException e){
JOptionPane.showMessageDialog(null, e.toString(),
"无法建立新文件",JOptionPane.ERROR_MESSAGE);
}
}
}
private void closeFile(){
if (isCurrentFileSaved()){
//释放窗口资源,然后关闭程序
dispose();
}
else{
int option=JOptionPane.showConfirmDialog(null, "文件已经修改,是否保存?","保存文件?",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null);
switch(option){
case JOptionPane.YES_OPTION:
saveFile();
break;
case(JOptionPane.NO_OPTION):
dispose();
}
}
}
private void cut(){
textArea.cut();
stateBar.setText("已修改");
popUpMenu.setVisible(false);
}
private void copy(){
textArea.copy();
popUpMenu.setVisible(false);
}
private void paste(){
textArea.paste();
stateBar.setText("已修改");
popUpMenu.setVisible(false);
}
private void processTextArea(){
stateBar.setText("已修改");
}
private void open(){
fileChooser=new JFileChooser();//要实例化这个fileChooser
//显示文件选取的对话框
int option =fileChooser.showDialog(null, null);
if (option==JFileChooser.APPROVE_OPTION){
try{
BufferedReader buf=
new BufferedReader(
new FileReader(
fileChooser.getSelectedFile()));
//设定文件标题
setTitle(fileChooser.getSelectedFile().toString());
//删除前一次的文件
textArea.setText("");
//设定状态栏
stateBar.setText("未修改");
//取得系统相依的换行字符
String lineSeparator=System.getProperty("line.swparator");//可以去掉,但是,不知道加上之后什么意思
//读取文件并附加之文字编辑区
String text;
while ((text=buf.readLine())!=null){
textArea.append(text);//添加文字
textArea.append(lineSeparator);//可以去掉,但是不知道加上之后什么意思。
}
buf.close();
}
catch(IOException e){
JOptionPane.showMessageDialog
(null, e.toString(),"开启文件失败",JOptionPane.ERROR_MESSAGE);
}
}
}
private boolean isCurrentFileSaved(){
if (stateBar.getText().equals("已修改")){//如果出于未修改状态
return false;
}
else {
return true;
}
}
public static void main(String[] args) {
// TODO 自动生成方法存根
new JNotePadUI();
}
}