`
yaoweinan
  • 浏览: 137540 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JXLayer 使用简单介绍

 
阅读更多

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

 

分享到:
评论

相关推荐

    swingx相关demo包

    例如,你可以使用JXLayer实现拖放操作、透明度调整、图形过滤器等高级特性。JXLayer通过装饰器模式将这些增强功能应用于任何标准的Swing组件,无需修改原始组件代码。 2. **BusyPainterDemo**: `BusyPainterDemo....

    你所不知道的五件事情--改进Swing(译) - Jiangshachina

    3. **示例代码**:以下是一个简单的示例,展示了如何使用`SwingUtilities.invokeLater()`方法来更新Swing组件: ```java import javax.swing.SwingUtilities; import javax.swing.JLabel; public class ...

    swingx最新jar包

    8. **JXLayer**:这是一个透明层组件,允许在现有组件上添加额外的行为或视觉效果,例如鼠标覆盖提示、动画效果等。 9. **JXStatusBar**:增强了Swing的JStatusBar,提供更多定制选项和组件集成。 10. **...

    jai_imageio-1.1-alpha.jar和swingx-1.0.jar

    在图片操作方面,SwingX的组件可能用于显示和编辑图像,例如使用JXImageView来展示图片,或者利用JXLayer提供图像效果和交互性。 **3. SLF4J (Simple Logging Facade for Java)** 虽然SLF4J在文件列表中,但它主要...

    jalayer-demo.jar

    swing gui 的一个demo文件包,可以直接下载使用,方便布局控件

Global site tag (gtag.js) - Google Analytics