欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java swing要点总结(三)

程序员文章站 2024-01-31 13:37:40
...

菜单栏

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);;//居中显示
		
	}

}