`

swing学习-look and feel设置篇

    博客分类:
  • JAVA
阅读更多

这几天打算写一个swing的程序,对于swing的look and feel比较感兴趣,进行了一小部分的研究。首先对于设置look and feel开发,首先查看设置程序。

  try {
   UIManager.setLookAndFeel(new CustomLookAndFeel());
  } catch (UnsupportedLookAndFeelException e) {
   throw new RuntimeException(e);
  }

基本的代码就是如此,研究一下代码

1。CustomLookAndFeel,主要是编写的Look and feel的类,其中在jdk中的javax.swing.plaf中定义了一些抽象类,javax.swing.plaf.basic中定义了一些基本的扩展。如果自定义laf,建议扩展javax.swing.plaf.basic中的类,这样可以只是扩展自己需要的内容,不用全部重新编写,后面再看如何自定义laf。

2。UIManager.setLookAndFeel中主要是将laf动态修改。他执行的代码主要如下内容:

  1)验证是否支持的laf,主要是执行laf中的isSupportedLookAndFeel方法进行验证。

  2)从线程中取LAFState,其中数组中定义的第一个是uidefaults,第二个定义的是systemdefault

  3)调用look and feel的initialize方法进行初始化,初始化以后根据初始化的情况设置LAFState的缺省值,调用laf的getDefaults方法。

  4)发布look and feel变更的消息

 

 

Look And Feel的扩展代码研究,以MetalLookAndFeel为研究目标进行有研究。

1。首先MetalLookAndFeel的实例化

2。调用initialize方法,子类没有定义,跳过

3。制定getDefaults方法,由于BasicLookAndFeel方法定义了一个执行的集合,代码如下

      initClassDefaults(table);
      initSystemColorDefaults(table);
      initComponentDefaults(table);

4。执行的顺序如下,首先定义缺省类,方法体的定义如下

        Object[] uiDefaults = {
                   "ButtonUI", metalPackageName + "MetalButtonUI",
                 "CheckBoxUI", metalPackageName + "MetalCheckBoxUI",
                 "ComboBoxUI", metalPackageName + "MetalComboBoxUI",
              "DesktopIconUI", metalPackageName + "MetalDesktopIconUI",
              "FileChooserUI", metalPackageName + "MetalFileChooserUI",
            "InternalFrameUI", metalPackageName + "MetalInternalFrameUI",
                    "LabelUI", metalPackageName + "MetalLabelUI",
       "PopupMenuSeparatorUI", metalPackageName + "MetalPopupMenuSeparatorUI",
              "ProgressBarUI", metalPackageName + "MetalProgressBarUI",
              "RadioButtonUI", metalPackageName + "MetalRadioButtonUI",
                "ScrollBarUI", metalPackageName + "MetalScrollBarUI",
               "ScrollPaneUI", metalPackageName + "MetalScrollPaneUI",
                "SeparatorUI", metalPackageName + "MetalSeparatorUI",
                   "SliderUI", metalPackageName + "MetalSliderUI",
                "SplitPaneUI", metalPackageName + "MetalSplitPaneUI",
               "TabbedPaneUI", metalPackageName + "MetalTabbedPaneUI",
                "TextFieldUI", metalPackageName + "MetalTextFieldUI",
             "ToggleButtonUI", metalPackageName + "MetalToggleButtonUI",
                  "ToolBarUI", metalPackageName + "MetalToolBarUI",
                  "ToolTipUI", metalPackageName + "MetalToolTipUI",
                     "TreeUI", metalPackageName + "MetalTreeUI",
                 "RootPaneUI", metalPackageName + "MetalRootPaneUI",
        };

        table.putDefaults(uiDefaults);

      定义了空间委派的UI对象的实现类

5。设置系统属性,也就是颜色的属性,代码如下

 MetalTheme theme = getCurrentTheme();
        Color control = theme.getControl();
        Object[] systemColors = {
                "desktop", theme.getDesktopColor(), /* Color of the desktop background */
          "activeCaption", theme.getWindowTitleBackground(), /* Color for captions (title bars) when they are active. */
      "activeCaptionText", theme.getWindowTitleForeground(), /* Text color for text in captions (title bars). */
    "activeCaptionBorder", theme.getPrimaryControlShadow(), /* Border color for caption (title bar) window borders. */
        "inactiveCaption", theme.getWindowTitleInactiveBackground(), /* Color for captions (title bars) when not active. */
    "inactiveCaptionText", theme.getWindowTitleInactiveForeground(), /* Text color for text in inactive captions (title bars). */
  "inactiveCaptionBorder", theme.getControlShadow(), /* Border color for inactive caption (title bar) window borders. */
                 "window", theme.getWindowBackground(), /* Default color for the interior of windows */
           "windowBorder", control, /* ??? */
             "windowText", theme.getUserTextColor(), /* ??? */
                   "menu", theme.getMenuBackground(), /* Background color for menus */
               "menuText", theme.getMenuForeground(), /* Text color for menus  */
                   "text", theme.getWindowBackground(), /* Text background color */
               "textText", theme.getUserTextColor(), /* Text foreground color */
          "textHighlight", theme.getTextHighlightColor(), /* Text background color when selected */
      "textHighlightText", theme.getHighlightedTextColor(), /* Text color when selected */
       "textInactiveText", theme.getInactiveSystemTextColor(), /* Text color when disabled */
                "control", control, /* Default color for controls (buttons, sliders, etc) */
            "controlText", theme.getControlTextColor(), /* Default color for text in controls */
       "controlHighlight", theme.getControlHighlight(), /* Specular highlight (opposite of the shadow) */
     "controlLtHighlight", theme.getControlHighlight(), /* Highlight color for controls */
          "controlShadow", theme.getControlShadow(), /* Shadow color for controls */
        "controlDkShadow", theme.getControlDarkShadow(), /* Dark shadow color for controls */
              "scrollbar", control, /* Scrollbar background (usually the "track") */
                   "info", theme.getPrimaryControl(), /* ToolTip Background */
               "infoText", theme.getPrimaryControlInfo()  /* ToolTip Text */
        };

        table.putDefaults(systemColors);

定义了主题,根据主题进行设定

6。定义了系统的组件属性,代码太多,不在粘贴

 

组件渲染,以JButton为例进行分析

1。首先JButton执行updateUI

2.通过代码setUI((ButtonUI)UIManager.getUI(this));进行设置,他主要是通过UIManager的getUI取得对象匹配的UI对象,这个地方主要是从laf中的定义进行匹配,然后设置

分享到:
评论

相关推荐

    java swing Mac风格的LookAndFeel

    在Java中,可以通过调用`javax.swing.UIManager`类的方法来设置LookAndFeel。例如,要设置为Mac风格的LookAndFeel,可以使用以下代码: ```java try { UIManager.setLookAndFeel("com.apple.laf.AquaLookAndFeel")...

    swing皮肤大全(look and feel)

    Swing Look and Feel是Java GUI库的一个重要特性,它允许开发者改变Java应用程序的用户界面外观和感觉,使得桌面应用能够呈现出不同的风格,如Windows、Mac OS X或自定义的3D样式。在Java Swing中,Look and Feel...

    substance-lookAndFeel

    java swing 中通过UIManager.setLookAndFeel(new SubstanceBusinessBlackSteelLookAndFeel()); JFrame.setDefaultLookAndFeelDecorated(true); //设置主题 SubstanceLookAndFeel.setCurrentTheme(new ...

    swing lookandfeel

    Swing Look and Feel是Java Swing库中的一个重要概念,它决定了应用程序的用户界面外观和交互体验。在Java中,Look and Feel(简称L&F)是一种可定制的机制,允许开发者改变程序的图形用户界面(GUI)风格,以适应...

    java Look and feel

    Java Look and Feel(L&F)是Java Swing中一个关键的概念,它定义了用户界面的视觉样式和交互体验。在Java应用程序中,Look and Feel决定了控件如按钮、文本框、菜单等的外观和感觉,使得程序可以在不同的操作系统上...

    使用lookandfeel为界面更换皮肤

    在Java的Swing库中,Look and Feel(简称LookAndFeel)是一种设计工具,它允许开发者改变应用程序的用户界面...同时,提供的这些zip文件可以作为实践和学习的例子,帮助开发者深入理解和应用Swing的LookAndFeel特性。

    JTatoo Swing LookAndFeel 外观

    有以下十种风格可以设置: javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.smart.SmartLookAndFeel"); javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel"); ...

    lookandfeel.zip

    开发者可以通过LookAndFeel类提供的方法来设置和获取当前的LookAndFeel。 2. **系统LookAndFeel**:Java提供了几种内置的LookAndFeel,包括跨平台的MetalLookAndFeel和与操作系统集成的WindowsLookAndFeel、...

    LookAndFeel换肤

    本篇文章将深入探讨Look and Feel的概念,以及如何在Swing中实现换肤。 首先,Look and Feel是Java图形用户界面(GUI)组件的外观和行为的一套规则。Java提供了多种内置的LAF,包括WindowsLookAndFeel、...

    java swing Mac风格的look and feel包下载

    java swing Mac风格的look and feel包,美化程序界面,含有使用说明和效果图,不好意思,这个上传时选错了文件,哈哈,不要下载了,正确的文件查另一个我的上传

    java look and feel

    Java Look and Feel(简称L&F)是Java Swing框架中一个重要的概念,它指的是用户界面的外观和交互特性。通过Java Look and Feel,开发者可以为Swing组件定制各种外观和行为,从而创建一致且美观的用户界面。本文旨在...

    Java Swing Look and Feel Demonstration

    本项目"Java Swing Look and Feel Demonstration"专注于展示Swing内建的各种Look and Feel效果。它通过一个名为AppLNFDemo的应用程序,直观地呈现了各种常见控件(如按钮、文本框、列表、表格等)在不同L&F风格下的...

    java_lookandfeel.rar_LookAndFeel_java gui_java look_look and fee

    Java Look and Feel(Java外观)是Java Swing库中的一部分,用于改变Java图形用户界面(GUI)应用程序的视觉样式。在Java GUI程序中,LookAndFeel管理组件的显示方式,包括颜色、字体、图标以及交互行为。Java提供了...

    lookandfeel(nimrod)

    Nimrod Look and Feel是一款高度可定制的Java Swing组件库,它允许开发者根据自己的需求调整颜色方案和控件样式。Swing是Java的标准GUI库,提供了丰富的组件供开发者构建桌面应用。Nimrod LAF(Look and Feel)的...

    java中MVC与LookAndFeel类及自创界面(更新)

    通过学习这个示例,你可以了解如何在Java中实际应用MVC模式,以及如何自定义和管理LookAndFeel。 在实践中,MVC模式可以帮助我们更好地组织代码,降低耦合度。LookandFeel的使用则能提升用户体验,让应用看起来更加...

    java中MVC与LookAndFeel类及自创界面ExtraLAF

    在Java中,创建自定义LookAndFeel通常涉及继承`javax.swing.plaf.ComponentUI`或其子类,并覆盖相关的方法来定义组件的绘制逻辑。 SwingSet2.jar可能是一个示例程序,用于演示Swing组件以及如何应用自定义的LookAnd...

    jgoodies swing LOOK&FEEL

    要在应用程序中启用JGoodies Swing LOOK&FEEL,开发者需要首先在类路径中包含JGoodies的相关库文件,然后在程序启动时设置LOOK&FEEL。这通常通过调用`UIManager.setLookAndFeel()`方法完成,并传入对应的LOOK&FEEL...

    javaSwing皮肤大全.rar

    2. 在更改LookAndFeel之前,最好先保存当前的LookAndFeel设置,以便在需要时恢复。 3. 更改LookAndFeel可能会引发UI组件的重新布局,因此在切换皮肤时,应在事件调度线程(Event Dispatch Thread, EDT)中进行。 4. ...

    JAVA Look&Feel

    设置Swing的LookAndFeel ——windows风格 笔记

    JGoodies Look and Feel

    **JGoodies Look and Feel** 是一款开源的Java Swing组件库,它提供了丰富的用户界面(UI)外观和感觉,使得开发者能够为Java应用程序定制出更加美观、统一且具有跨平台一致性的用户界面。JGoodies Look and Feel是...

Global site tag (gtag.js) - Google Analytics