关闭

(总结)Swing组件的使用---下拉式菜单(menu),弹出式菜单(JPopupMenu),选项卡窗体(JTabbedPane)

标签: 编程javamenuimportstringclass
10664人阅读 评论(1) 收藏 举报
分类:

    菜单是GUI中最常用的组件,菜单不是Component类的子类,不能放置在普通容器中,不受布局管理器的约束,只能放置在菜单栏中.

    菜单组件由菜单栏 (MenuBar)、菜单(Menu)和菜单项(MenuItem)三部分组成。 一个菜单栏由若干个菜单组成,一个菜单又由若干个菜单项组成。一般菜单栏放 Frame 窗口中,只要调用 Frame 类的 setMenuBar()方法即可。

    常用的菜单有:下拉式菜单和弹出式菜单(独立显示,可出现在任意地方).


一:下拉式菜单的创建步骤:

1.创建一个菜单栏。 
2.调用 Frame 的 setMenuBar()方法将菜单栏加入 Frame 中。 
3.分别创建若干个 Menu 对象,并加入 MenuBar 中。 
4.对于每个 Menu 对象,分别创建若干个 MenuItem 对象,并加入 Menu 中。

实例:

import java.awt.*;

public class MenuDemo {

	Frame f;
	MenuBar mb;
	Menu menuFile;
	MenuItem mItemNew, mItemOpen, mItemSave;

	MenuDemo() {
		f = new Frame("我的菜单实例");
		f.setBounds(300, 100, 400, 300);

		mb = new MenuBar(); // 创建菜单栏MenuBar
		menuFile = new Menu("文件"); 

		mItemNew = new MenuItem("新建");
		mItemOpen = new MenuItem("打开");
		
		menuFile.add(mItemNew);
		mItemSave = new MenuItem("保存");
		
		menuFile.add(mItemOpen);
		// 加入分割线
		menuFile.addSeparator();
                menuFile.add(mItemSave);
                mb.add(menuFile); 
                // 菜单栏中加入“文件”菜单
 
// setMenuBar:将此窗体的菜单栏设置为指定的菜单栏。
                f.setMenuBar(mb); 
                f.setVisible(true);
          }
    public static void main(String[] args) {
        new MenuDemo();
  }
}

有图有真相:(下拉的菜单项无法截图) 


二:弹出式菜单的创建步骤:

 1.先建立最基本的JFrame框架.

 2.创建右键弹出式菜单(JPopupMenu)和添加的菜单项(JMenuItem). 3.使用add方法和insert方法向JPopupMenu中添加或者插入. 4.通过调用弹出式菜单触发器对应的show方法来显示弹出式菜单,检查所有的MouseEvent事件,看其是否是弹出式菜单触发器,然后在合适的时候显示弹出式菜单

实例:

import java.awt.event.*;
import javax.swing.*;

public class JPopMenu_Demo extends JFrame {

	// 弹出菜单的实现,弹出菜单是一个可弹出并显示一系列选项的小窗口
	JPopupMenu popupMenu; 

	public JPopMenu_Demo() {
		super("右键弹出式菜单"); // 调用父类构造函数
		// 实例化弹出菜单 
		popupMenu = new JPopupMenu(); 
        // 增加菜单项到菜单上
		popupMenu.add(new JMenuItem("菜单项"));
		popupMenu.add(new JButton("按钮")); 
		popupMenu.add(new JLabel("标签"));

		myEvents();

		setSize(350, 300); // 设置窗口大小
		setLocation(400, 200);
		setVisible(true); // 设置窗口为可视
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出程序
	}

	private void myEvents() {
		// 窗口的鼠标事件处理
		addMouseListener(new MouseAdapter() { 
			// 点击鼠标
			public void mousePressed(MouseEvent event) { 
				// 调用triggerEvent方法处理事件
				triggerEvent(event); 
			}
			// 释放鼠标
			public void mouseReleased(MouseEvent event) { 
				triggerEvent(event);
			}

			private void triggerEvent(MouseEvent event) { // 处理事件
				// isPopupTrigger():返回此鼠标事件是否为该平台的弹出菜单触发事件。
				if (event.isPopupTrigger()) 
					// 显示菜单
					popupMenu.show(event.getComponent(), event.getX(),
							event.getY()); 
			}
		});
	}

	public static void main(String args[]) {
		new JPopMenu_Demo();
	}
}

有图有真相(不过挺丑)



三:选项卡窗体:


1.基本说明:


2.常用方法:

  我们把多个JPanel的对象添加到 JTabbedPanel中去 。然后再
JTabbedPanel 添加到窗体,代码如下:
JTabbedPane jp=new JTabbedPane(JTabbedPane.LEFT) ; //设置选项卡在坐标
JPanel p1=new JPanel() ;
JPanel p2=new JPanel() ;
JPanel p3=new JPanel() ;
JPanel p4=new JPanel() ; //创建多个容器
jp.add("窗体1", p1) ;
jp.add("窗体2", p2) ;
jp.add("窗体3", p3) ;//添加子容器,并且为选项卡添加名字
this.add(jp,BorderLayout.CENTER); //将选项卡窗体添加到主窗体上去


3.代码示例和截图:

import java.awt.*;
import javax.swing.*;

/**
 * <p>Title: 选项卡演示</p>
 * <p>Description: 这里是一个选项卡演示,点击不同的卡片,显示的内容不同</p>
 */

public class JTabbedPaneDemo1 extends JPanel {
	
	public JTabbedPaneDemo1() {
		super(new GridLayout(1, 1));

		ImageIcon icon = createImageIcon("images/MyIcon.gif");
		JTabbedPane tabbedPane = new JTabbedPane();

		Component panel1 = makeTextPanel("#第一个卡片#");
		tabbedPane.addTab("One", icon, panel1, "第一个卡片提示信息!");
		tabbedPane.setSelectedIndex(0);

		Component panel2 = makeTextPanel("##第二个卡片##");
		tabbedPane.addTab("Two", icon, panel2, "第二个卡片提示信息!");

		Component panel3 = makeTextPanel("###第三个卡片###");
		tabbedPane.addTab("Three", icon, panel3, "第三个卡片提示信息!");

		Component panel4 = makeTextPanel("####第四个卡片####");
		tabbedPane.addTab("Four", icon, panel4, "第四个卡片提示信息!");

		// 将选项卡添加到panl中
		add(tabbedPane);
	}

	/**
	 * <br>
	 * 方法说明:添加信息到选项卡中 <br>
	 * 输入参数:String text 显示的信息内容 <br>
	 * 返回类型:Component 成员对象
	 */
	protected Component makeTextPanel(String text) {
		JPanel panel = new JPanel(false);
		JLabel filler = new JLabel(text);
		filler.setHorizontalAlignment(JLabel.CENTER);
		panel.setLayout(new GridLayout(1, 1));
		panel.add(filler);
		return panel;
	}

	/**
	 * <br>
	 * 方法说明:获得图片 <br>
	 * 输入参数:String path 图片的路径 <br>
	 * 返回类型:ImageIcon 图片对象
	 */
	protected static ImageIcon createImageIcon(String path) {
		// java.net.URL imgURL = TabbedPaneDemo.class.getResource(path);
		if (path != null) {
			return new ImageIcon(path);
		} else {
			System.out.println("Couldn't find file: " + path);
			return null;
		}
	}

	public static void main(String[] args) {
		// 使用Swing窗体描述
		// JFrame.setDefaultLookAndFeelDecorated(true);

		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			
		}
		// 创建窗体
		JFrame frame = new JFrame("TabbedPaneDemo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().add(new JTabbedPaneDemo1(), BorderLayout.CENTER);

		// 显示窗体
		frame.setSize(400, 200);
		frame.setVisible(true);
	}
}
运行截图:  


























   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:217227次
    • 积分:1754
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:11篇
    • 译文:0篇
    • 评论:10条