Java swing要点总结(三)
菜单栏
菜单及其事件处理
要开发一个框架窗口的菜单,首现需要利用JMenuBar类创建一个菜单条,然后在菜单条上添加一系列的菜单对象,菜单对象可由JMenu类创建。为使鼠标单击菜单条上的菜单时,可展示出各种功能的菜单项,必须利用JMenuItem类创建各个菜单项,并将菜单项添加到相应的菜单上,上图所示为菜单各组件及其关系。
以下是创建菜单时比较常用的一些方法。
(1)JMenuBar()
此为JMenuBar类最常用的一个构造函数。
(2)void setMenuBar(JMenuBar menubar)
JFrame类提供了此方法来把菜单条放置在JFrame框架窗口中。
(3)JMenu(String s)
此为JMenu最常用的一个可设置菜单文字的构造函数。
(4) JMenu add(JMenu c)
此为JMenuBar类提供的用来设置菜单项分割条的方法。
(5)void addSepartor()
此为JMenu类提供的用来设置菜单项分割条的方法。
(6)JMenuItem(String text)
此为JMenuItem类的一个创建菜单项的构造函数,可设置菜单项的文字。
(7)JMenuItem(String text,Icon icon)
这个JMenuItem类的构造函数可创建一个带文字和图标的菜单项。
(8)JMenuItem add(JMenuItem menuItem)
JMenu类提供了此方法来将菜单项添加到菜单上。
(9)void setAccelerator(KeyStroke keyStroke)
JMenuItem类提供了此方法来设置菜单项的快捷键。参数的KeyStroke类也是位于swing包中。
(10) static KeyStroke getKeyStroke(int keyCode,int modifiers,boolean onKeyRelease)
KeyStroke类提供此静态方法来取得用于设置快捷键的KeyStroke对象,参数keyCode可取值于java.awt.KeyEvent类定义的虚拟键。
下面是用java实现记事本的打开,保存,以及退出的功能代码如下:
package njci.software.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
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.JSeparator;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileNameExtensionFilter;
public class MyFrame extends JFrame {
private static final long serialVersionUID = 4232937812480671357L;
public MyFrame(){
this.setTitle("我的第一个记事本");
this.setSize(400,300);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setLocationRelativeTo(null); //居中显示
//为按钮添加一个单机事件
JButton jbn=new JButton("系统配置");
//frmMain.add(jbn);
//jbn.setBounds(10, 10, 100, 20);
jbn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int result=JOptionPane.showConfirmDialog(null, "系统配置","提示",JOptionPane.YES_NO_OPTION);
if(JOptionPane.YES_OPTION==result){
//ConfigDialog dlgConfig=new ConfigDialog(this);
//dlgConfig.setVisible(true);
}
}
});
createMenu(this);
this.setVisible(true);
}
/**添加一个菜单栏
*
*/
public void createMenu( final JFrame frame){
JMenuBar menuBar=new JMenuBar();
//文件菜单
JMenu menuFile=new JMenu("文件(F)");
JMenuItem itemNew=new JMenuItem("新建(N)");
//添加一个快捷键
itemNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,KeyEvent.CTRL_MASK));
//给新建按钮添加一个事件
itemNew.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
});
JMenuItem itemOpen=new JMenuItem("打开(O)...");
//打开事件
itemOpen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"TXT", "txt");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(getParent());//getparent
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
}
});
//添加一个快捷键
itemOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,KeyEvent.CTRL_MASK));
JMenuItem itemSave=new JMenuItem("保存(S)...");
itemSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();// 创建文件选择器
// int option = chooser.showDialog(getparent, approveButtonText);// 打开文件保存对话框
}
});
//添加一个快捷键
itemSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,KeyEvent.CTRL_MASK));
JMenuItem itemSaveAs=new JMenuItem("另存为(A)...");
JMenuItem itemConfig=new JMenuItem("系统配置(C)...");
itemConfig.addActionListener(new ActionListener() { //设置系统配置弹出来的新窗体
@Override
public void actionPerformed(ActionEvent e) {
ConfigDialog dlgConfig=new ConfigDialog(frame);
dlgConfig.setVisible(true);
}
});
JMenuItem itemPrint=new JMenuItem("打印(p)...");
//添加一个快捷键
itemPrint.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,KeyEvent.CTRL_MASK));
JMenuItem itemExit=new JMenuItem("退出(X)");
//给退出按钮添加一个时间
itemExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int result=JOptionPane.showConfirmDialog(null, "退出","提示",JOptionPane.YES_NO_OPTION);
if(JOptionPane.YES_OPTION==result){
System.exit(0);
}}
});
//添加记忆键
menuFile.setMnemonic('F');
itemNew.setMnemonic('N');
//itemOpen.setMnemonic("");
//添加快捷键
itemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,KeyEvent.CTRL_MASK));
menuFile.add(itemNew);
menuFile.add(itemOpen);
menuFile.add(itemSave);
menuFile.add(itemSaveAs);
menuFile.add(new JSeparator()); //添加一个分隔线
menuFile.add(itemConfig);
menuFile.add(itemPrint);
menuFile.add(new JSeparator()); //添加一个分隔线
menuFile.add(itemExit);
menuBar.add(menuFile);
//编辑键设置
JMenu menuEdit=new JMenu("编辑(E)");
JMenuItem itemCancel=new JMenuItem("撤销(U)");
//添加一个快捷键
itemCancel.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,KeyEvent.CTRL_MASK));
JMenuItem itemCut=new JMenuItem("剪切(T)");
//添加一个快捷键
itemCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,KeyEvent.CTRL_MASK));
JMenuItem itemCopy=new JMenuItem("复制(C)");
itemCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,KeyEvent.CTRL_MASK));
JMenuItem itemPaste=new JMenuItem("粘贴(P)");
itemPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,KeyEvent.CTRL_MASK));
JMenuItem itemDelete=new JMenuItem("删除(L)");
//删除快捷键
itemDelete.setAccelerator(KeyStroke.getKeyStroke((char)KeyEvent.VK_DELETE)); //需要强制转换
JMenuItem itemFind=new JMenuItem("查找(F)...");
itemFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,KeyEvent.CTRL_MASK));
JMenuItem itemFindNext=new JMenuItem("查找下一个(N)");
itemFindNext.setAccelerator(KeyStroke.getKeyStroke("F3"));
JMenuItem itemReplace=new JMenuItem("替换(R)...");
itemReplace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,KeyEvent.CTRL_MASK));
JMenuItem itemGo=new JMenuItem("转到(G)...");
itemGo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,KeyEvent.CTRL_MASK));
JMenuItem itemCheckall=new JMenuItem("全选(A)");
itemCheckall.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,KeyEvent.CTRL_MASK));
JMenuItem itemDate=new JMenuItem("时间/日期(D)");
itemDate.setAccelerator(KeyStroke.getKeyStroke("F5"));
menuEdit.add(itemCancel);
menuEdit.add(new JSeparator()); //添加一个分隔线
menuEdit.add(itemCut);
menuEdit.add(itemCopy);
menuEdit.add(itemPaste);
menuEdit.add(itemDelete);
menuEdit.add(new JSeparator()); //添加一个分隔线
menuEdit.add(itemFind);
menuEdit.add(itemFindNext);
menuEdit.add(itemReplace);
menuEdit.add(itemGo);
menuEdit.add(new JSeparator()); //添加一个分隔线
menuEdit.add(itemCheckall);
menuEdit.add(itemDate);
menuBar.add(menuEdit);
//格式键设置
JMenu menuFormat=new JMenu("格式(O)");
JMenuItem itemNewline=new JMenuItem("自动换行(W)");
JMenuItem itemFont=new JMenuItem("字体(F)...");
menuFormat.add(itemNewline);
menuFormat.add(itemFont);
menuBar.add(menuFormat);
//查看键设置
JMenu menuSee=new JMenu("查看(V)");
JMenuItem itemStatus=new JMenuItem("状态栏(S)");
menuSee.add(itemStatus);
menuBar.add(menuSee);
//帮助键设置
JMenu menuHelp=new JMenu("帮助(H)");
JMenuItem itemSeeHelp=new JMenuItem("查看帮助(H)");
JMenuItem itemAbout=new JMenuItem("关于记事本(A)");
menuHelp.add(itemSeeHelp);
menuHelp.add(itemAbout);
menuBar.add(menuHelp);
frame.setJMenuBar(menuBar);
}
public static void main(String[] args){
new MyFrame();
}
}
package njci.software.view;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class ConfigDialog extends JDialog {
/**
*
*/
private static final long serialVersionUID = -713398359834685238L;
public ConfigDialog(final JFrame frame){
super(frame,"这是一个对话框",true);
//Container container=getContentPane(); //创建一个容器
//container.add(new JLabel("这是一个对话框")); //在容器中添加标签
//添加内部控件
JPanel pnlConfig=new JPanel();
pnlConfig.setLayout(null);
final JLabel lblWidth=new JLabel("宽度");
final JLabel lblHeight=new JLabel("高度");
final JTextField txtWidth=new JTextField();
final JTextField txtHeight=new JTextField();
JButton btnSave=new JButton("保存");
btnSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int width=Integer.parseInt(txtWidth.getText());
int height=Integer.parseInt(txtHeight.getText());
frame.setSize(width,height);
}
});
JButton btnCancel=new JButton("取消");
//进行布局
lblWidth.setBounds(50,30,60,40);
txtWidth.setBounds(150,30,160,40);
lblHeight.setBounds(50,100,60,40);
txtHeight.setBounds(150,100,160,40);
btnSave.setBounds(50,160,100,40);
btnCancel.setBounds(200,160,100,40);
pnlConfig.add(lblWidth);
pnlConfig.add(txtWidth);
pnlConfig.add(lblHeight);
pnlConfig.add(txtHeight);
pnlConfig.add(btnSave);
pnlConfig.add(btnCancel);
this.add(pnlConfig);
this.setSize(400,320);
this.setResizable(false);//窗体大小不可改变
this.setLocationRelativeTo(frame);;//居中显示
}
}
上一篇: 一个简单的DataFrame程序