package com.qiu.demo;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/**
* 一個封裝了LookAndFeel子菜單 可用于改變組件的LookAndFeel 這些LookAndFeel是JRE自帶的 LookAndFeel
* 這些組件必須與一個父組件的相 關聯,才可更新LookAndFeel
*
* @author QIU_BaiChao
*/
public class JLookAndFeelMenu extends JMenu {
/**
* 默認的菜單名
*/
PRivate static final String defaultMenuName = "LookAndFeel";
/**
* 得到系統的安裝的所有LookAndFeel
*/
UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels();
/**
* 按鈕組,將一組LookAndFeel的單選按鈕放在里面
*/
ButtonGroup buttonGroup = new ButtonGroup();
/**
* 父組件,更新LookAndFeel只能更新
* 在同一個父組件的LookAndFeel
*/
Component parent;
/**
* 構造函數
*
* @param menuName
* 菜單名
* @param parrent
* 父組件,將在同一個父組
* 件容器的所有Component更新LookAndFeel
*/
public JLookAndFeelMenu(String menuName, final Component parent) {
// 生成各個可以選擇LookAndFeel的單選按鈕子菜單
// generateLookAndFeelSubMenu(parent);
setParentComponent(parent);
// 設置菜單名
this.setText(menuName);
}
/**
* 構造函數 使用默認的菜單名:LookAndFeel
*
* @param parent
* 父組件,將在同一個父組件容器的
* 所有Component更新LookAndFeel
*/
public JLookAndFeelMenu(Component parent) {
this(defaultMenuName, parent);
}
/**
* 默認構造函數 使用默認的菜單名,
* 還需設置父組件方法
* 調用setParentComponent(Component parent)方法
*/
public JLookAndFeelMenu() {
super(defaultMenuName);
}
/**
* 生成LookAndFeel的單選子菜單
*
* @param parent
*/
private void generateLookAndFeelSubMenu(final Component parent) {
for (int i = 0; i < info.length; i++) {
JRadioButtonMenuItem item = new JRadioButtonMenuItem(info[i]
.getName(), i == 0);
final String className = info[i].getClassName();
// 增加事件處理
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evn) {
try {
UIManager.setLookAndFeel(className);
} catch (Exception e) {
e.printStackTrace();
}
// 更新組件的LookAndFeel
SwingUtilities.updateComponentTreeUI(parent);
}
});
buttonGroup.add(item);
add(item);
}
}
新聞熱點
疑難解答