package com.GUI.wx;
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 static final long serialVersionUID = 1L;
private JMenuItem menuOpen;
private JMenuItem menuClose;
private JMenuItem menuSave;
private JMenuItem menuSaveAs;
private JMenu editMenu;
private JMenuItem menuCopy;
private JMenuItem menuPaste;
private JMenuItem menuCut;
private JTextArea textArea;
private JMenuItem menuHelp;
private JMenuItem menuExplan;
private JPopupMenu popUpMenu;
private JLabel stateBar;
/**
* @param args
*/
public JNotePadUI() {
super("文本编辑器");
setUpUICoponent();
setUpEventListenner();
setVisible(true);
}
private void setUpUICoponent() {
setSize(400, 300);
// 菜单栏
JMenuBar menuBar = new JMenuBar();
// 设置文件菜单
JMenu fileMenu = new JMenu("文件");
menuBar.add(fileMenu);
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_E,
InputEvent.CTRL_MASK));
fileMenu.add(menuOpen);
fileMenu.addSeparator(); // 分隔线
fileMenu.add(menuSave);
fileMenu.add(menuSaveAs);
fileMenu.addSeparator(); // 分隔线
fileMenu.add(menuClose);
// 设置编辑菜单
editMenu = new JMenu("编辑");
menuBar.add(editMenu);
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("关于");
menuBar.add(aboutMenu);
menuHelp = new JMenuItem("帮助");
menuExplan = new JMenuItem("说明");
aboutMenu.add(menuHelp);
aboutMenu.add(menuExplan);
setJMenuBar(menuBar);
// 文本区
textArea = new JTextArea();
textArea.setFont(new Font("宋体", Font.PLAIN, 16));
textArea.setLineWrap(true);
JScrollPane paneText = new JScrollPane(textArea,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
Container contenPane = getContentPane();
contenPane.add(paneText, BorderLayout.CENTER);
// //状态栏
stateBar = new JLabel("未修改");
stateBar.setHorizontalAlignment(SwingConstants.LEFT);
stateBar.setBorder(BorderFactory.createEtchedBorder());
contenPane.add(stateBar, BorderLayout.SOUTH);
popUpMenu = editMenu.getPopupMenu();
}
public void setUpEventListenner() {
// 单击关闭窗口按钮事件处理
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();
}
});
// 菜单-说明
menuExplan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showOptionDialog(null, " welcome to use ", null,
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.DEFAULT_OPTION, 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 mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1)
popUpMenu.setVisible(false);
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
打开文件
private void openFile() {
//查看当前文件状态
if (isCurrentFileSaved()) {
open();
} else {
int option = JOptionPane.showConfirmDialog(null, "文件已修改,是否保存?",
"保存文件?", JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE, null);
switch (option) {
case JOptionPane.YES_OPTION:
saveFile();
break;
case JOptionPane.NO_OPTION:
open();
break;
}
}
}
// open()
private void open() {
JFileChooser fileChooser=new 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());
//删除前一次文件
textArea.setText("");
//设置状态栏
stateBar.setText("未修改");
//取得系统相依的换行字符
String lineSeparator = System.getProperty("line.separator");
//读取文件并附加至文本编辑区
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 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() {
JFileChooser fileChooser=new JFileChooser();
//显示文件对话框
int option = fileChooser.showDialog(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 boolean isCurrentFileSaved() {
if (stateBar.getText().equals("未修改"))
return true;
else {
return false;
}
}
/// 剪切文件
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("已修改");
}
public static void main(String[] args) {
new JNotePadUI();
}
}