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);
}
});
}
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);
}
});
}
解决方案 »
- 关于百度地图中的代码 !!!!跪求!!!
- 请问Rectangle2D是值类型还是应用类型?
- 【菜鸡问题】 java与jBuilder的区别
- 单选按钮如何获取值,然后插数据进数据库?高手速进
- JDK版本问题Error(5,45): class file has wrong version 49.0, should
- 学习清华的Java2实用教程
- hibernate从mysql数据库显示数据乱码
- [关心Java界面的进来]Java应用程序的界面问题!
- package问题?
- 同样的程序在main函数里执行和在servlet执行,结果是不一样的呢?大家给个提醒,谢谢了。
- 类在实例化之前是否占有内存?
- JMenu里面菜单项的图标怎么去掉?
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();
}
}
//不知道问题出在那,麻烦看看,谢谢!
txa 没有实例化,加入以下语句即可.txa = new JTextArea();
是不是应该把TextEditor设置为public呢
仅仅是建议......
可以不用把该类设置为public的!谢谢3(4)楼,问题解决了!谢谢!