package texteditor;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
class TextEditor extends JFrame{
private JMenuItem menuOpen;
private JMenuItem menuSave;
private JMenuItem menuSaveAs;
private JMenuItem menuClose;
private JMenuItem menuUndo;
private JMenuItem menuCopy;
private JMenuItem menuCut;
private JMenuItem menuPaste;
private JMenuItem menuDelete;
private JMenuItem menuSeleteAll;
private JCheckBoxMenuItem menuLinewrap;
private JMenuItem menuFont;
private JMenuItem menuColor;
private JMenuItem menuAbout;
private JTextArea txa;
private JLabel stateBar;
private JPopupMenu popupMenu;
private JMenu fileMenu;
private JMenu editMenu;
private JMenu formatMenu;
private JMenu aboutMenu;
public TextEditor(){
super("记事本---未保存");
setUpUIComponent();
setUpEventListener();
setVisible(true);
}
private void setUpUIComponent(){
setLocation(100,10);
setSize(500,540);
//菜单栏
JMenuBar bar = new JMenuBar();
//设置菜单项  
fileMenu = new JMenu("文件[F]");
fileMenu.setMnemonic('F');
editMenu = new JMenu("编辑[E]");
editMenu.setMnemonic('E');
formatMenu = new JMenu("格式[O]");
formatMenu.setMnemonic('O');
aboutMenu = new JMenu("关于[A]");
aboutMenu.setMnemonic('A');
//设置文件菜单的子菜单
menuOpen = new JMenuItem("打开");
menuSave = new JMenuItem("保存");
menuSaveAs = new JMenuItem("另存为(A)");
menuClose = new JMenuItem("关闭");
//设置编辑菜单的子菜单
menuUndo = new JMenuItem("撤消");
menuUndo.setEnabled(false);
menuCopy = new JMenuItem("复制");
menuCut = new JMenuItem("剪切");
menuPaste = new JMenuItem("粘贴");
menuDelete = new JMenuItem("删除");
menuSeleteAll = new JMenuItem("全选");
//设置格式菜单的子菜单
menuLinewrap = new JCheckBoxMenuItem("自动换行");
menuFont = new JMenuItem("字体");
menuColor = new JMenuItem("颜色");
//设置关于菜单的子菜单
menuAbout = new JMenuItem("关于本记事本");
//添加文件子菜单快捷键的代码
menuOpen.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
menuSave.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
menuSaveAs.setMnemonic('A');
menuClose.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
//添加编辑子菜单快捷键的代码
menuUndo.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
menuCopy.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
menuCut.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
menuPaste.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
menuDelete.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_D,InputEvent.CTRL_MASK));
menuSeleteAll.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
//添加格式子菜单快捷键的代码
menuLinewrap.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_W,InputEvent.CTRL_MASK));
menuFont.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
menuColor.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_R,InputEvent.CTRL_MASK));
//添加文件菜单的子菜单项
fileMenu.add(menuOpen);
fileMenu.addSeparator();
fileMenu.add(menuSave);
fileMenu.add(menuSaveAs);
fileMenu.addSeparator();
fileMenu.add(menuClose);
//添加编辑菜单的子菜单项
editMenu.add(menuUndo);
editMenu.addSeparator();
editMenu.add(menuCopy);
editMenu.add(menuCut);
editMenu.add(menuPaste);
editMenu.add(menuDelete);
editMenu.addSeparator();
editMenu.add(menuSeleteAll);
//添加格式菜单的子菜单项
formatMenu.add(menuLinewrap);
formatMenu.addSeparator();
formatMenu.add(menuFont);
formatMenu.add(menuColor);
//添加关于菜单的子菜单项
aboutMenu.add(menuAbout);
//设置菜单栏
bar.add(fileMenu);
bar.add(editMenu);
bar.add(formatMenu);
bar.add(aboutMenu);
setJMenuBar(bar);
//添加文本编辑区
JTextArea txa = new JTextArea();
txa.setFont(new Font("宋体",Font.PLAIN,16));  //设置默认字体为正常宋体
//txa.setLineWrap(true); // 设置自动换行
JScrollPane panel = new JScrollPane(txa,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);  //垂直滚动条设置为自动,水平滚动条设置为不可用
Container c = getContentPane();
c.add(panel,BorderLayout.CENTER);
//添加状态栏
stateBar = new JLabel("未修改");
stateBar.setHorizontalAlignment(SwingConstants.LEFT);
stateBar.setBorder(BorderFactory.createEtchedBorder());
c.add(stateBar,BorderLayout.SOUTH);
//定义弹出菜单
    popupMenu = editMenu.getPopupMenu();
}
private void setUpEventListener(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//菜单--打开
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){
saveAsFile();
}
});
//菜单--关闭文件
menuClose.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
closeFile();
}
});
//菜单--剪切
menuCut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
cutFile();
}
});
//菜单--复制
menuCopy.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
copyFile();
}
});
//菜单--粘贴
menuPaste.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
pasteFile();
}
});
//菜单--关于
menuAbout.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showOptionDialog(null,"by yang","about mynote",JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE,null,null,null);
}
});
//编辑区键盘事件
txa.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
processTextArea();
}
});
//编辑区鼠标事件
txa.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e){
if(e.getButton()==MouseEvent.BUTTON3)
popupMenu.show(editMenu,e.getX(),e.getY());
}
public void mouseClicked(MouseEvent e){
if(e.getButton()==MouseEvent.BUTTON1)
popupMenu.setVisible(false);
}
});
}

解决方案 »

  1.   

    //太长了,接(上):
    private void openFile(){
    if(isCurrentFileSaved()){
    open(); //若文件为保存状态,则打开
    }
    else {
    //显示对话框
    int option = JOptionPane.showConfirmDialog(null,"文件已修改,是否保存?","保存文件?",
         JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null);
    switch(option){
    //确认文件保存
    case 0:
    saveFile();//保存文件
    break;
    //放弃文件保存
    case 1:
    open();
    break;
    }
    }
    }
    private void open(){
    JFileChooser fileChooser = new JFileChooser();
    //filechooser是jFileChooser的实例
    int option = fileChooser.showDialog(null,null);
    //使用者单击确认按钮
    if(option==JFileChooser.APPROVE_OPTION){
    try{
    //打开选取的文件
    BufferedReader buf = new BufferedReader(new FileReader(fileChooser.getSelectedFile()));
    //设定文件标题
    setTitle(fileChooser.getSelectedFile().toString());
    //删除前一次文件
    txa.setText("");
    //设定状态栏
    stateBar.setText("未修改");
    //取得系统相依的换行符
    String linSeparator = System.getProperty("line.separator");
    //取得文件并附加至文件编辑区
    String text;
    while((text=buf.readLine())!=null){
    txa.append(text);
    txa.append(linSeparator);
    }
    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;

    }
    private void saveFile(){
    File file = new File(getTitle());
    if(!file.exists()){
    saveAsFile();
    }
    else {
    try{
    BufferedWriter buf = new BufferedWriter(new FileWriter(file));
    buf.write(txa.getText());
    buf.close();
    stateBar.setText("为修改");
    }
    catch(IOException e){
    JOptionPane.showMessageDialog(null,e.toString(),"写入文件失败",JOptionPane.ERROR_MESSAGE);
    }
    }
    }
    private void saveAsFile(){
    JFileChooser fileChooser = new JFileChooser();
    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_OPTION,JOptionPane.WARNING_MESSAGE,null);
    switch(option){
    //确认文件保存
    case 0:
    saveFile();//保存文件
    break;
    //放弃文件保存
    case 1:
    open();
    break;
    }
    }
    }
    private void cutFile(){
    txa.cut();
    stateBar.setText("已修改");
    popupMenu.setVisible(false);
    }
    private void copyFile(){
    txa.copy();
    popupMenu.setVisible(false);
    }
    private void pasteFile(){
    txa.paste();
    stateBar.setText("已修改");
    popupMenu.setVisible(false);
    }
    private void processTextArea(){
    stateBar.setText("已修改");
    }
    public static void main(String args[]){
    new TextEditor();
    }
    }
    //不知道问题出在那,麻烦看看,谢谢!
      

  2.   

    你的txa没有实例化,你只需在初始化的时候加个   txa = new JTextArea(); 即可.
      

  3.   

    可以结贴吧,嘿嘿.
    txa 没有实例化,加入以下语句即可.txa = new JTextArea();
      

  4.   

    提个建议,怎么没有public的类呢?
    是不是应该把TextEditor设置为public呢
    仅仅是建议......
      

  5.   


    可以不用把该类设置为public的!谢谢3(4)楼,问题解决了!谢谢!