package com.le.menu;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
public class MenuManagerShow {
private MenuManagerShow() {
init();
}
public static void main(String[] args) {
MenuManagerShow menuManager = new MenuManagerShow();
menuManager.show();
}
private void show() {
}
class MenuItemListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
statusLabel.setText("JMenu Item clicked:" + e.getActionCommand() + ".");
}
}
/**
* 给主窗口设置背景色
*
* @param mainFrame
* 主窗口
* @see 分析:JFrame默认使用流式布局管理器(FlowLayout)将整个窗体进行覆盖操作,<br>
* 设置的颜色被布局管理器给覆盖住了,所以无法看见。<br>
* 解决:在JFrame中添加一个面板容器,使得面板容器对窗体覆盖即可。<br>
*/
private void initFrameBgColor(JFrame mFrame) {
Container pane = mFrame.getContentPane();
pane.setBackground(Color.orange);
}
/**
* 标题
*/
private static final String MENU_MANAGER_TITILE = "Manager Tool";
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
private void init() {
// 主界面
mainFrame = new JFrame();
// 标题
mainFrame.setTitle(MENU_MANAGER_TITILE);
// 设置窗口大小
mainFrame.setSize(400, 400);
// 设置窗体的位置属性
mainFrame.setLocation(400, 200);
// 设置窗体关闭时退出程序(3)
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*
* mainFrame.addWindowListener(new WindowAdapter() { public void
* windowClosing(WindowEvent windowEvent) { System.exit(0); } });
*/
// 设置允许调整窗体大小
mainFrame.setResizable(true);
mainFrame.setLayout(new GridLayout(3, 1));
// 下边这种方式设置第一个Frame的背景色不生效,需要用initFrameBgColor()里的方式
// mainFrame.setBackground(Color.blue);
initFrameBgColor(mainFrame);
headerLabel = new JLabel("11", JLabel.CENTER);
statusLabel = new JLabel("22", JLabel.CENTER);
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
controlPanel.setBackground(Color.gray);
mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
mainFrame.add(statusLabel);
initMenuBar(mainFrame);
mainFrame.setVisible(true);
}
/**
* 初始化菜单栏
*
* @param mainFrame
*/
private void initMenuBar(JFrame mFrame) {
// 创建菜单栏
final JMenuBar menuBar = new JMenuBar();
// 创建菜单栏菜单
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
final JMenu aboutMenu = new JMenu("About");
final JMenu linkMenu = new JMenu("Links");
// 创建菜单栏菜单子项
JMenuItem newMenuItem = new JMenuItem("New");
newMenuItem.setMnemonic(KeyEvent.VK_N);
newMenuItem.setActionCommand("New");
// 创建菜单栏菜单子项:允许是否选中
final JRadioButtonMenuItem showLinksMenu = new JRadioButtonMenuItem("Show Links", true);
showLinksMenu.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
// state,结果1表示选中,结果2表示不选中
// System.out.println(e.getStateChange());
// 获取第三个菜单栏菜单
if (menuBar.getMenu(3) != null) {
menuBar.remove(linkMenu);
// 重新绘制主界面
mainFrame.repaint();
} else {
menuBar.add(linkMenu);
mainFrame.repaint();
}
}
});
// 创建监听器
MenuItemListener menuItemListener = new MenuItemListener();
// 添加点击的动作
newMenuItem.addActionListener(menuItemListener);
fileMenu.add(newMenuItem);
fileMenu.add(showLinksMenu);
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(aboutMenu);
menuBar.add(linkMenu);
// 添加菜单栏后,下边的组件高度会被挤压变小
mFrame.setJMenuBar(menuBar);
}
}