菜單是GUI中最常用的組件,菜單不是Component類的子類,不能放置在普通容器中,不受布局管理器的約束,只能放置在菜單欄中.
菜單組件由菜單欄 (MenuBar)、菜單(Menu)和菜單項(xiàng)(MenuItem)三部分組成。 一個(gè)菜單欄由若干個(gè)菜單組成,一個(gè)菜單又由若干個(gè)菜單項(xiàng)組成。一般菜單欄放 Frame 窗口中,只要調(diào)用 Frame 類的 setMenuBar()方法即可。
常用的菜單有:下拉式菜單和彈出式菜單(獨(dú)立顯示,可出現(xiàn)在任意地方).
一:下拉式菜單的創(chuàng)建步驟:
1.創(chuàng)建一個(gè)菜單欄。
2.調(diào)用 Frame 的 setMenuBar()方法將菜單欄加入 Frame 中。
3.分別創(chuàng)建若干個(gè) Menu 對(duì)象,并加入 MenuBar 中。
4.對(duì)于每個(gè) Menu 對(duì)象,分別創(chuàng)建若干個(gè) MenuItem 對(duì)象,并加入 Menu 中。
實(shí)例:
import java.awt.*;
public class MenuDemo {
Frame f;
MenuBar mb;
Menu menuFile;
MenuItem mItemNew, mItemOpen, mItemSave;
MenuDemo() {
f = new Frame("我的菜單實(shí)例");
f.setBounds(300, 100, 400, 300);
mb = new MenuBar(); // 創(chuàng)建菜單欄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:將此窗體的菜單欄設(shè)置為指定的菜單欄。
f.setMenuBar(mb);
f.setVisible(true);
}
public static void main(String[] args) {
new MenuDemo();
}
}
有圖有真相:(下拉的菜單項(xiàng)無(wú)法截圖)
二:彈出式菜單的創(chuàng)建步驟:
1.先建立最基本的JFrame框架.
2.創(chuàng)建右鍵彈出式菜單(JPopupMenu)和添加的菜單項(xiàng)(JMenuItem). 3.使用add方法和insert方法向JPopupMenu中添加或者插入. 4.通過(guò)調(diào)用彈出式菜單觸發(fā)器對(duì)應(yīng)的show方法來(lái)顯示彈出式菜單,檢查所有的MouseEvent事件,看其是否是彈出式菜單觸發(fā)器,然后在合適的時(shí)候顯示彈出式菜單
實(shí)例:
import java.awt.event.*;
import javax.swing.*;
public class JPopMenu_Demo extends JFrame {
// 彈出菜單的實(shí)現(xiàn),彈出菜單是一個(gè)可彈出并顯示一系列選項(xiàng)的小窗口
JPopupMenu popupMenu;
public JPopMenu_Demo() {
super("右鍵彈出式菜單"); // 調(diào)用父類構(gòu)造函數(shù)
// 實(shí)例化彈出菜單
popupMenu = new JPopupMenu();
// 增加菜單項(xiàng)到菜單上
popupMenu.add(new JMenuItem("菜單項(xiàng)"));
popupMenu.add(new JButton("按鈕"));
popupMenu.add(new JLabel("標(biāo)簽"));
myEvents();
setSize(350, 300); // 設(shè)置窗口大小
setLocation(400, 200);
setVisible(true); // 設(shè)置窗口為可視
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 關(guān)閉窗口時(shí)退出程序
}
private void myEvents() {
// 窗口的鼠標(biāo)事件處理
addMouseListener(new MouseAdapter() {
// 點(diǎn)擊鼠標(biāo)
public void mousePressed(MouseEvent event) {
// 調(diào)用triggerEvent方法處理事件
triggerEvent(event);
}
// 釋放鼠標(biāo)
public void mouseReleased(MouseEvent event) {
triggerEvent(event);
}
private void triggerEvent(MouseEvent event) { // 處理事件
// isPopupTrigger():返回此鼠標(biāo)事件是否為該平臺(tái)的彈出菜單觸發(fā)事件。
if (event.isPopupTrigger())
// 顯示菜單
popupMenu.show(event.getComponent(), event.getX(),
event.getY());
}
});
}
public static void main(String args[]) {
new JPopMenu_Demo();
}
}
有圖有真相(不過(guò)挺丑)
三:選項(xiàng)卡窗體:
1.基本說(shuō)明:
2.常用方法:
我們把多個(gè)JPanel的對(duì)象添加到 JTabbedPanel中去 。然后再
JTabbedPanel 添加到窗體,代碼如下:
JTabbedPane jp=new JTabbedPane(JTabbedPane.LEFT) ; //設(shè)置選項(xiàng)卡在坐標(biāo)
JPanel p1=new JPanel() ;
JPanel p2=new JPanel() ;
JPanel p3=new JPanel() ;
JPanel p4=new JPanel() ; //創(chuàng)建多個(gè)容器
jp.add("窗體1", p1) ;
jp.add("窗體2", p2) ;
jp.add("窗體3", p3) ;//添加子容器,并且為選項(xiàng)卡添加名字
this.add(jp,BorderLayout.CENTER); //將選項(xiàng)卡窗體添加到主窗體上去
3.代碼示例和截圖:
import java.awt.*;
import javax.swing.*;
/**
* <p>Title: 選項(xiàng)卡演示</p>
* <p>Description: 這里是一個(gè)選項(xiàng)卡演示,點(diǎn)擊不同的卡片,顯示的內(nèi)容不同</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("#第一個(gè)卡片#");
tabbedPane.addTab("One", icon, panel1, "第一個(gè)卡片提示信息!");
tabbedPane.setSelectedIndex(0);
Component panel2 = makeTextPanel("##第二個(gè)卡片##");
tabbedPane.addTab("Two", icon, panel2, "第二個(gè)卡片提示信息!");
Component panel3 = makeTextPanel("###第三個(gè)卡片###");
tabbedPane.addTab("Three", icon, panel3, "第三個(gè)卡片提示信息!");
Component panel4 = makeTextPanel("####第四個(gè)卡片####");
tabbedPane.addTab("Four", icon, panel4, "第四個(gè)卡片提示信息!");
// 將選項(xiàng)卡添加到panl中
add(tabbedPane);
}
/**
* <br>
* 方法說(shuō)明:添加信息到選項(xiàng)卡中 <br>
* 輸入?yún)?shù):String text 顯示的信息內(nèi)容 <br>
* 返回類型:Component 成員對(duì)象
*/
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>
* 方法說(shuō)明:獲得圖片 <br>
* 輸入?yún)?shù):String path 圖片的路徑 <br>
* 返回類型:ImageIcon 圖片對(duì)象
*/
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) {
}
// 創(chuàng)建窗體
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);
}
}
運(yùn)行截圖: