`

swing学习-laf定义篇

阅读更多

近期打算用ribbon的界面编写swing的界面,当然ribbon需要自定义组件,自定义组件以后需要依靠laf定义编写想office2007界面风格的颜色,需要定义laf。对于laf进行了简单的研究。

jdk内部的laf的组成

在jdk内部,laf定义主要依靠LookAndFeel抽象类来定义的,其中他主要定义了可插入外观的laf,在jdk内部主要包括下面几个外观

LookAndFeel

      |

      |-> BasicLookAndFeel 标准桌面 LookAndFeel 类(JLF、Mac、Windows 等)从该基类派生

         |

         |->MetalLookAndFeel

         |->MotifLookAndFeel

         |->SynthLookAndFeel 提供创建自定义外观的基础

         |->WindowsLookAndFeel

     |->MultiLookAndFeel    多路外观允许同时将多个 UI 与一个组件相关联。

 

SynthLookAndFeel 是jdk内部提供的一个用来自定义laf的主要实现类,通过配置文件进行定义,但是考虑到office2007风格不简简单单的处理一下界面的颜色,所以不采用这个,打算自定义扩展BasicLookAndFeel,下面说一下laf的处理逻辑。其实说到laf的实现机制,主要还需要依靠swing的mvc,其中swing的mvc主要包括了Modle,compont,ui deletage,其中主要的展现渲染逻辑都放在了ui delegage中,这样就给我们动态定义UI做好了基础。

 

laf如何执行的,可以从我们使用laf的代码进行分析,首先我们调用UIManager.setLookAndFeel()进行设定,其中代码都执行了什么内容,如下

    public static void setLookAndFeel(LookAndFeel newLookAndFeel)
        throws UnsupportedLookAndFeelException
    {
        if ((newLookAndFeel != null) && !newLookAndFeel.isSupportedLookAndFeel()) {
            String s = newLookAndFeel.toString() + " not supported on this platform";
            throw new UnsupportedLookAndFeelException(s);
        }

        LAFState lafState = getLAFState();
        LookAndFeel oldLookAndFeel = lafState.lookAndFeel;
        if (oldLookAndFeel != null) {
            oldLookAndFeel.uninitialize();     -----1
        }

        lafState.lookAndFeel = newLookAndFeel;
        if (newLookAndFeel != null) {
            sun.swing.DefaultLookup.setDefaultLookup(null);
            newLookAndFeel.initialize();     -----2
            lafState.setLookAndFeelDefaults(newLookAndFeel.getDefaults());   ----3
        }
        else {
            lafState.setLookAndFeelDefaults(null);
        }

        SwingPropertyChangeSupport changeSupport = lafState.
                                         getPropertyChangeSupport(false);
        if (changeSupport != null) {
            changeSupport.firePropertyChange("lookAndFeel", oldLookAndFeel,
                                             newLookAndFeel);
        }
    }

这三个步骤是主要的执行代码,其中主要的getDefaults里面的代码执行如下:

BasicLookAndFeel 中提供了一个getDefaults方法,他里面记录了所有的定义的步骤,看看他里面主要进行了那些操作。

        initClassDefaults(table);     ------- 1
        initSystemColorDefaults(table);  --2
        initComponentDefaults(table);   --3

 

1。主要定义了组建于UI的对应关系,

final String basicPackageName = "javax.swing.plaf.basic.";
 Object[] uiDefaults = {
     "ButtonUI", basicPackageName + "BasicButtonUI",
 。。。
 };

 table.putDefaults(uiDefaults);

  这里面定义了ButtonUI对应的UI显示组件显示,这样定义了以后再组件中的updateUI的时候会根据UIManager.get(getUIClassID())就可以直接取出这个地方定义的UI,其中UI才是真正显示的内容,所以需要定义一些列的组件的UI。

2。定义组件系统定义颜色

 protected void initSystemColorDefaults(UIDefaults table)
    {
 String[] defaultSystemColors = {
           "desktop", "#005C5C", /* Color of the desktop background */
。。。
 };

 loadSystemColors(table, defaultSystemColors, isNativeLookAndFeel());
    }

其中的颜色一定要采用后面的loadSystemColors方法将颜色加载起来后面可以UIManager.getColor取得制定标志的颜色值,这个可以在UI中使用

3。 定义组件的缺省属性。比如可以在此处定义组件的字体等。

 

其实定义laf主要讲这几个方法进行自定义,基本上就可以改变laf的内容,laf主要是显示风格的变化,有时候为了体现产品的能力,可以可以让用户自定义颜色,如果每一种颜色都需要一个laf的话,那就天麻烦了,laf主要是显示的风格,可以自定义的laf中关联一些skin或者theme等用来保存颜色值,这样就可以动态修改颜色值了,创建个性化十足的系统。

分享到:
评论

相关推荐

    netbeans-dark-laf:netbeans-dark-laf

    Netbeans-dark-laf项目通常包含一系列的资源文件,如CSS样式表和图像文件,它们定义了UI元素的颜色、边框、背景等视觉属性。通过更改这些资源,开发者可以自定义主题,使其更符合个人审美。在应用这个深色LAF后,IDE...

    a03-laf-jdk5-1.1.1.jar

    java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包

    substance7.1(全) Swing LAF

    "Substance7.1(全) Swing LAF"是一个针对Java Swing用户界面库的皮肤包,专注于提升应用程序的视觉外观和用户体验。Swing Look and Feel(LAF)是Java Swing框架的一部分,允许开发者改变应用程序的界面风格以适应...

    darklaf:Darklaf-基于Darcula-Laf的主题化Swing外观

    LaF与Java> = 1.8兼容(您需要> = 1.9才能获得适当的缩放比例)。 您可以在weisj.github.io/darklaf-docs上找到所有属性值 该项目在Maven Central上可用: 玛文 < groupId>com.github.weisj</ groupId> ...

    laf-win10.jar

    laf-win10.jar

    laf-plugin-6.3.zip

    jasmine-gradle-plugin.zip,使用jasmine在现场测试javascript,并作为buildgradle支持运行jasmine javascript规范的一部分。加上jslint

    LAF让Swing漂亮起来03 (模拟闪烁的股票行情系統)

    在本文中,我们将深入探讨如何使用Look and Feel(LAF)技术使Swing应用程序看起来更加美观,特别是通过创建一个模拟闪烁的股票行情系统。Swing是Java中的一个GUI工具包,虽然功能强大,但默认的界面风格可能并不...

    java swing Mac风格的LookAndFeel

    Java Swing 是Java提供的一种用于创建桌面应用程序用户界面的库,它允许开发者构建功能丰富的图形用户界面(GUI)。在Swing中,LookAndFeel是一个关键概念,它决定了应用程序的视觉样式,包括控件的外观、颜色、字体...

    LAF让Java Swing漂亮起来

    NULL 博文链接:https://jimmyhr.iteye.com/blog/1845824

    Python库 | laf-fabric-4.5.25.tar.gz

    《Python库:深入理解laf-fabric-4.5.25》 在Python的世界里,库是构建强大应用程序的基础,它们提供了丰富的功能,让开发者能够高效地完成各种任务。今天我们将聚焦于一个名为“laf-fabric”的库,通过其4.5.25...

    Swing样式大全 主题 皮肤包(全56种经典)LookAndFeel

    Swing样式大全 主题 皮肤包(全56种经典)LookAndFeel 本样式合集共有56种样式,包括使用说明和实例,即装即用 5种经典的Alloy和liquidlnf包 7种另类风格和实例包 20种样式风格包 24种样式合集包

    界面 SwingSet + GenLAF (version 1).rar

    开发者可以通过SwingSet学习如何使用Swing组件来构建自己的应用程序,并了解它们的默认行为和可定制性。 GenLAF(Generic Look and Feel)库则是为了帮助开发者轻松改变Java应用程序的视觉风格。Java标准库提供了两...

    Swing外观 Swing Applet 外观

    - **方法三**:在`swing.properties`配置文件中修改`swing.laf`属性。此文件通常位于JRE的lib目录下。 3. **外观选择的注意事项**: - `UIManager.getSystemLookAndFeelClassName()`会尝试根据用户的本地系统设置...

    The Java Swing tutorial.pdf

    - `javax.swing.plaf`:Swing的外观和感觉(LAF)包,包含不同外观风格的实现,如基本的、金属的、多层的和合成的LAF。 - `javax.swing.table`:用于构建表格数据的组件。 - `javax.swing.text`:用于文本显示和编辑...

    swing-htabs:Swing 的分层选项卡

    摇摆-htabs Swing 的分层选项卡。背景Java Swing UI 不支持创建分层选项卡(显示为树的选项卡)。 我们需要这个 。 我们找不到任何现有的库来实现这一点,因此这个项目。地位该库的当前状态是概念验证。 我们正在...

    swing窗体外观皮肤

    本篇将深入探讨如何使用"nimrodlf-1.0e"这个库来为Swing窗体更换皮肤,并调整其透明度。 NimrodLF是一个用于Swing的皮肤库,它提供了多种风格的外观,可以显著提升Swing应用的视觉效果。通过引入nimrodlf-1.0e.jar...

    Luminescent properties of Nd^3^+-doped LaF"3 core/shell nanoparticles with enhanced near infrared (NIR) emission

    标题:“Luminescent properties of Nd^3^+-doped LaF3 core/shell nanoparticles with enhanced near infrared (NIR) emission”(掺Nd^3^+-的LaF3核/壳纳米颗粒的发光性质及增强的近红外(NIR)发射) 1. 纳米...

    java swing里支持,js,java编程语言,关键字高亮显示

    Java Swing 是 Java GUI(图形用户界面)开发的一个重要库,它是Java AWT(Abstract Window Toolkit)的扩展...通过学习和理解这些内容,开发者可以为自己的Java Swing应用添加类似的功能,提升其专业性和用户友好性。

Global site tag (gtag.js) - Google Analytics