package jAVA;
/*
* @author
*/
/*
* 1.参考如下图形,完成简单记事本的界面设计及事件响应。
*/
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JButton;
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.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.w3c.dom.events.MouseEvent;
import util.Common;
public class Main extends JFrame{
private Container pnlMain;
private JMenuBar mbMain;
private JMenu mnuFile ,mnuHelp;
private JMenuItem mnuiNew,mnuiOpen,mnuiSave,mnuiSaveAs,mnuiExit;
private JMenuItem mnuiHelp,mnuiAbout;
private JToolBar tbMain; //工具栏
private JButton btnNew,btnOpen,btnSave,btnSaveAs,btnHelp;
private JPopupMenu mnuPop; //弹出菜单
private JMenuItem mnuiNewPop,mnuiOpenPop,mnuiSavePop,mnuiSaveAsPop;
private JScrollPane srlArea; //滚动面板
private JTextArea txtArea; //文本区
private boolean isEdited,isSaved; //是否编辑,是否保存
private File file;
private JFileChooser FileChooser ;
public Main(){
isEdited=false;
isSaved=false;
file=null;
initFrm();
initMenu();
initMenuFile();
initMenuHelp();
initToolBar();
initCenter();
}
public void initToolBar(){
tbMain=new JToolBar();
pnlMain.add(tbMain,BorderLayout.NORTH);
btnNew=makeButton("new","新建一个文件");
btnOpen=makeButton("open","打开一个文件");
btnSave=makeButton("save","保存文件");
btnSaveAs=makeButton("saveas","文件另存为");
btnHelp=makeButton("help","帮助");
tbMain.add(btnNew);
tbMain.add(btnOpen);
tbMain.add(btnSave);
tbMain.add(btnSaveAs);
tbMain.addSeparator();
tbMain.add(btnHelp);
btnNew.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
fileNew(e);
}
});
btnSave.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
fileSave(e);
}
});
}
public void initCenter(){
txtArea=new JTextArea(); //文本区
srlArea=new JScrollPane(txtArea); //滚动面板
pnlMain.add(srlArea,BorderLayout.CENTER);
txtArea.getDocument().addDocumentListener(new DocumentListener(){
public void changedUpdate(DocumentEvent e) {
isEdited=true;
}
public void insertUpdate(DocumentEvent e) {
isEdited=true;
}
public void removeUpdate(DocumentEvent e) {
isEdited=true;
}
});
txtArea.addMouseListener(new MouseAdapter (){
public void mouseClicked(MouseEvent e){
}
});
}
private JButton makeButton(String strImage, String txtToolTip) {
JButton tmp=new JButton(new ImageIcon(Common.getClassPath()+"icon/"+strImage+".jpg"));
tmp.setToolTipText(txtToolTip); //提示
return tmp;
}
public void initMenuFile(){
mnuiNew=makeMenuItem("新 建(N)","new",'N',"control N");
mnuiOpen=makeMenuItem("打 开(O)","open",'O',"control O");
mnuiSave=makeMenuItem("保 存(S)","save",'S',"control S");
mnuiSaveAs=makeMenuItem("另存为(A)","saveas",'A'," ");
mnuiExit=makeMenuItem("退 出(X)"," ",'E'," ");
mnuFile.add(mnuiNew); //在菜单中添加菜单项
mnuFile.add(mnuiOpen);
mnuFile.addSeparator(); //菜单分隔符(空菜单)
mnuFile.add(mnuiSave);
mnuFile.add(mnuiSaveAs);
mnuFile.addSeparator();
mnuFile.add(mnuiExit);
//弹出菜单
mnuPop=new JPopupMenu();
mnuiNewPop=makeMenuItem("新 建(N)","new",'N',"control N");
mnuiOpenPop=makeMenuItem("打 开(O)","open",'O',"control O");
mnuiSavePop=makeMenuItem("保 存(S)","save",'S',"control S");
mnuiSaveAsPop=makeMenuItem("另存为(A)","saveas",'A'," ");
mnuPop.add(mnuiNewPop);
mnuPop.add(mnuiOpenPop);
mnuFile.addSeparator();
mnuPop.add(mnuiSavePop);
mnuPop.add(mnuiSaveAsPop);
//事件
mnuiNew.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
fileNew(e);
}
});
mnuiNewPop.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
fileNew(e);
}
});
mnuiSave.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
fileSave(e);
}
});
mnuiSavePop.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
fileSave(e);
}
});
}
private void fileNew(ActionEvent e) {
if(isEdited && !isSaved ){ //编辑 而且未保存
int ret=JOptionPane.showConfirmDialog(mnuiNew,"是否保存当前文件",
"保存文件",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
if(ret==JOptionPane.YES_OPTION){
fileSave(e);
} else if(ret==JOptionPane.CANCEL_OPTION){
return;
}else if(ret==JOptionPane.CLOSED_OPTION){
return;
}
}
txtArea.setText("");
isEdited=false;
isSaved=false;
file=null;
}
private void fileSave(ActionEvent e) {
//是否有对应的文件
if(file==null){
//给用户选择 保存的文件
JFileChooser fc=new JFileChooser();
int ret=fc.showSaveDialog(this);
if(ret==JFileChooser.APPROVE_OPTION){ //保存动作
file=fc.getSelectedFile(); //获得用户选择的文件
}else{
return;
}
}
//保存
saveToFile(txtArea.getText(),file); //把文档内容写入到文件 file中
isEdited=false;
isSaved=false;
}
private void saveToFile(String text, File file2) {
JOptionPane.showMessageDialog(this,"["+file.getAbsolutePath() +
"] 正在保存中 ...");
}
public void initMenuHelp(){
mnuiHelp=makeMenuItem("帮助主题(H)","help",'H',"control H ");
mnuiAbout=makeMenuItem("关于记事本(A)","about",'A',"control A ");
mnuHelp.add(mnuiHelp); //在菜单中添加菜单项
mnuHelp.add(mnuiAbout);
}
//菜单
public void initMenu(){
mbMain=new JMenuBar();
this.setJMenuBar(mbMain); //放在框架 (专门的方法)
mnuFile=new JMenu("文件(F)");
mnuHelp=new JMenu("帮助(H)");
mbMain.add(mnuFile); //添加到菜单栏
mbMain.add(mnuHelp);
}
public void initFrm(){ //初始化框架
//1.标题
this.setTitle("迷你记事本");
//2.logo
Toolkit toolkit=Toolkit.getDefaultToolkit();
Image image=toolkit.getImage(Common.getClassPath()+"pic/about.jpg");
this.setIconImage(image);
//3.大小
this.setSize(800,680);
//4.居中
Dimension screenSize=toolkit.getScreenSize();
double x=(screenSize.getWidth()-this.getWidth())/2;
double y=(screenSize.getHeight()-this.getHeight())/2;
this.setLocation((int)x,(int)y);
//正常退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//主面板
pnlMain=this.getContentPane(); //默认边界布局
}
private JMenuItem makeMenuItem(String sName, String iconName,char X, String acce) {
JMenuItem tmp;
if(iconName.length()==0){
tmp=new JMenuItem(sName);
}else{
String iconPath=Common.getClassPath()+"icon/"+iconName+".jpg"; //图片
tmp=new JMenuItem(sName,new ImageIcon(iconPath));
}
tmp.setMnemonic(X); //热键
if(acce.length()>0){
tmp.setAccelerator(KeyStroke.getKeyStroke(acce)); //快捷键
}
return tmp;
}
public static void main(String[] args) {
new Main().setVisible(true);
}
}