JXLayer 使用简单介绍

6 篇文章 0 订阅

JXLayer 是一个很好的Swing 控件装饰类库,其主要要的优点在于将修饰的一些UI与原本的UI 实现了很好的分离,便于操作和管理。

 

下面简单介绍一下几个常用的使用方法(API:http://www.jarvana.com/jarvana/view/org/swinglabs/jxlayer/3.0.4/jxlayer-3.0.4-javadoc.jar!/index.html)

JXLayer  此类对象是我们使用JXLayer 最终要使用的对象,其作用就像一个中间件,将我们自己的UI和单独定义的LayerUI 结合在一起,达到最终要的结果。

LayerUI 此类 与XLayer 结合,在LayerUI 的paint 方法中画出你要修饰的图案。并且在这个里面可以监听到控件的事件,这个需要重写eventDispatched(AWTEvent, JXLayer)

LockableUI 此类提供了锁定控件的功能,在以前如果你设置一个JCompent enable 为false,它的子控件依然可以被使用,而此类可以完全实现,并对鼠标图标可以进行自定义。

SpotLightUI 此类简单的说就是在控件上面加一个罩子,可以设置颜色等等。

DebugRepaintingUI 这个类的功能很2, 它能实现的是显示哪些UI 被重画了,相当一个debug 效果。

JScrollPane 这个类提供的功能是鼠标中间键按住之后拖动 可以拖动scrollbar 的效果,可惜在3.0.4版本中我新加的控件不知道哪里去了。

ButtonPanelUI  这个类能干事么? 用了之后没感觉到:(

下面写了一个简单的UI 使用插件

package lyon.study.jxlayer;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JComponent;
import javax.swing.JScrollPane;

import org.jdesktop.jxlayer.JXLayer;
import org.jdesktop.jxlayer.plaf.LayerUI;
import org.jdesktop.jxlayer.plaf.ext.ButtonPanelUI;
import org.jdesktop.jxlayer.plaf.ext.DebugRepaintingUI;
import org.jdesktop.jxlayer.plaf.ext.LockableUI;
import org.jdesktop.jxlayer.plaf.ext.MouseScrollableUI;
import org.jdesktop.jxlayer.plaf.ext.SpotLightUI;

public class UIPlug{

  private static LayerUI<JComponent> drawRoundRectLayerUI;

  private static Map<JComponent,LockableUI> lockLayers=new HashMap<JComponent,LockableUI>();
  public static JComponent drowRoundRect(final JComponent com){
    return new JXLayer<JComponent>(com,getLayerUI());
  }
  private static LayerUI<JComponent> getLayerUI() {
    drawRoundRectLayerUI=drawRoundRectLayerUI!=null?drawRoundRectLayerUI:new LayerUI<JComponent>(){
      /**
       * Comment for <code>serialVersionUID</code>
       */
      private static final long serialVersionUID = 7131940091813767911L;

      @Override
      public void paint(Graphics g, JComponent jComponent) {
        super.paint(g, jComponent);
        final int width = jComponent.getWidth();
        final int height = jComponent.getHeight();
        g.setColor(Color.BLUE);
        g.drawRoundRect(5,5,width-10,height-10,90,90);
        g.dispose();
      }
    };
    return drawRoundRectLayerUI;
  }
  public static JComponent doLockUI(final JComponent com,final boolean isLocked){
    LockableUI lockableUI;
    if(lockLayers.containsKey(com)){
      lockableUI = lockLayers.get(com);
      if(lockableUI!=null){
        lockableUI.setLocked(isLocked);
      }
      return com;
    }else{
      lockableUI=new LockableUI(); 
      lockableUI.setLockedCursor(Cursor.getDefaultCursor());
      lockLayers.put(com, lockableUI);
      final JXLayer<JComponent> layer = new JXLayer<JComponent>(com, lockableUI);
      lockableUI.setLocked(isLocked);
      return layer;
    }
  }
  public static JComponent addColorCoverLayer(final JComponent com){
   SpotLightUI spotLightUI = new SpotLightUI();
   spotLightUI.setShadowEnabled(true);
   return new JXLayer<JComponent>(com,spotLightUI);
  }
  public static JXLayer<JScrollPane> autoScrollPanel(final JScrollPane com){
    return new JXLayer<JScrollPane>(com,new MouseScrollableUI());
  }
  
  public static JComponent debugPanel(final JComponent com){

    DebugRepaintingUI  debugUI = new DebugRepaintingUI();
    JXLayer<JComponent> layer = new JXLayer<JComponent>(com, debugUI);
    return layer;

  }
  
  public static JComponent buttonPanel(final JComponent com){
    ButtonPanelUI ui=new ButtonPanelUI();
    return new JXLayer<JComponent>(com, ui);
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值