選單是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);
}
}