第三章:
继续上面的,我们开始修饰我们的主窗口。
系统退出的时候,我们可能需要添加些退出处理工作,这里我们可以修改下jframe默认的关闭窗口事件。
this .setDefaultCloseOperation( 0 );
// 添加程序退出事件
this .addWindowListener(
new WindowAdapter() ... {
public void windowClosing(WindowEvent e)
...{
DTDAction.safeExit();
}
}
);
可以看到。我们这里又使用了一个新类,DTDAction,这个类是用来存放大部分的公用函数用的。比如,日后的编码解码,加密,压缩解压缩等等。。。我们同样把它放在comm包中。
我们在DTDInfo类中,添加些提示信息:
String[] tmp = ...{
"退出",
"exit"
};
return tmp[languageFlag];
}
public static String getMainFrame_CloseDialog_Tips() ... {
String[] tmp = ...{
"您确认退出吗?",
"Are you sure to exit ?"
};
return tmp[languageFlag];
}
先简单的建立一个DTDAction的关闭退出事件,以后退出需要做的事情,都可以再这里做了。
DTDAction.java
import javax.swing.JOptionPane;
/** */ /**
* 系统的公共函数库
* @author vicken
*
*/
public class DTDAction ... {
// 安全退出程序
public static void safeExit()...{
int choose = JOptionPane.showConfirmDialog(null,DTDInfo.getMainFrame_CloseDialog_Tips(),DTDInfo.getMainFrame_CloseDialog_Title(),JOptionPane.YES_NO_OPTION);
if(choose==JOptionPane.YES_OPTION)
...{
try...{
//退出前的处理工作
//saveSystemConfig();
}catch(Exception exc)...{
exc.printStackTrace();
}
System.exit(0);
}
}
}
这时候,我们点击关闭系统的那个叉叉的时候,系统就会提示,是否真的退出了。
呵呵,专业的软件,是否都需要一个 菜单栏呢? 呵呵,打开一般的工具软件,都有吧。所有少了它可不行。现在虽然还没有想到,需要添加些什么菜单项再里面,但是总是要加,就得先加上不是。java中实现menu很简单。就是添加一个 JMenuBar,这时候,我们可以建立一个自己的DTDMenuBar,继承这个JMenuBar,然后来修改。
先在MainFrame的构造函数中,添加代码
DTDMenuBar menuBar = new DTDMenuBar();
this .setJMenuBar(menuBar);
现在我们开始来实现DTDMenuBar。
import javax.swing.JMenuBar;
public class DTDMenuBar extends JMenuBar ... {
}
为了将所有的menu事件集中管理,我们再建立一个类MenuAction。
这时候的代码:
MenuAction.java
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import comm.DTDAction;
public class MenuAction extends AbstractAction ... {
private String objname = "";
public MenuAction(String name,String objname)...{
super(name);
this.objname = objname;
}
public void actionPerformed(ActionEvent arg0) ...{
if(objname.equals("Exit"))...{
DTDAction.safeExit();
}
}
}
DTDMenuBar.java
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import comm.DTDInfo;
public class DTDMenuBar extends JMenuBar ... {
public DTDMenuBar()...{
JMenu fileMenu = new JMenu(DTDInfo.getDTDMenuBar_File());
fileMenu.setMnemonic('F');
//添加事件
Action exitAction = new MenuAction(DTDInfo.getDTDMenuBar_Exit(),"Exit");
JMenuItem exitItem = fileMenu.add(exitAction);
exitItem.setMnemonic('x');
exitItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_X,InputEvent.CTRL_MASK));
fileMenu.add(exitItem);
this.add(fileMenu);
}
}
运行我们的程序,我们得到了一个带下拉条的file菜单,里面有一个退出程序的菜单选项。
而且我们可以很容易的修改 DTDMenuBar MenuAction 来很容易的添加新的菜单事件触发和实现。
呵呵,打个包,给个源代码。