服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

一个封装了java改变lookandfeel的java菜单,可直接在可视化编辑拖拉(原创)

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);
 }

}

扫描关注微信公众号