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);
}
}
/**
* 得到父组件
*
* @return
*/
public component getparentcomponent() {
return parent;
}
/**
* 设置父组件
*
* @param parent
*/
public void setparentcomponent(component parent) {
this.parent = parent;
generatelookandfeelsubmenu(parent);
}
/**
* 演示怎样使用这个lookandfeel菜单
*/
public static void main(string[] args) {
jframe frame = new jframe();
frame.setdefaultcloseoperation(jframe.exit_on_close);
// app.centerofscreen(frame,400,300);
frame.setsize(400, 300);
frame.setlocation(200, 200);
jmenubar bar = new jmenubar();
// jmenu menu = new lookandfeelmenu("外观选择",frame);
jlookandfeelmenu menu = new jlookandfeelmenu();
menu.settext("外观选择");
menu.setparentcomponent(frame);
bar.add(menu);
frame.getcontentpane().add(borderlayout.north, bar);
frame.getcontentpane().add(borderlayout.center, new jbutton("hello"));
frame.setvisible(true);
}
}
闽公网安备 35060202000074号