近期打算用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项目通常包含一系列的资源文件,如CSS样式表和图像文件,它们定义了UI元素的颜色、边框、背景等视觉属性。通过更改这些资源,开发者可以自定义主题,使其更符合个人审美。在应用这个深色LAF后,IDE...
java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包java皮肤包
"Substance7.1(全) Swing LAF"是一个针对Java Swing用户界面库的皮肤包,专注于提升应用程序的视觉外观和用户体验。Swing Look and Feel(LAF)是Java Swing框架的一部分,允许开发者改变应用程序的界面风格以适应...
LaF与Java> = 1.8兼容(您需要> = 1.9才能获得适当的缩放比例)。 您可以在weisj.github.io/darklaf-docs上找到所有属性值 该项目在Maven Central上可用: 玛文 < groupId>com.github.weisj</ groupId> ...
laf-win10.jar
jasmine-gradle-plugin.zip,使用jasmine在现场测试javascript,并作为buildgradle支持运行jasmine javascript规范的一部分。加上jslint
在本文中,我们将深入探讨如何使用Look and Feel(LAF)技术使Swing应用程序看起来更加美观,特别是通过创建一个模拟闪烁的股票行情系统。Swing是Java中的一个GUI工具包,虽然功能强大,但默认的界面风格可能并不...
Java Swing 是Java提供的一种用于创建桌面应用程序用户界面的库,它允许开发者构建功能丰富的图形用户界面(GUI)。在Swing中,LookAndFeel是一个关键概念,它决定了应用程序的视觉样式,包括控件的外观、颜色、字体...
NULL 博文链接:https://jimmyhr.iteye.com/blog/1845824
《Python库:深入理解laf-fabric-4.5.25》 在Python的世界里,库是构建强大应用程序的基础,它们提供了丰富的功能,让开发者能够高效地完成各种任务。今天我们将聚焦于一个名为“laf-fabric”的库,通过其4.5.25...
Swing样式大全 主题 皮肤包(全56种经典)LookAndFeel 本样式合集共有56种样式,包括使用说明和实例,即装即用 5种经典的Alloy和liquidlnf包 7种另类风格和实例包 20种样式风格包 24种样式合集包
开发者可以通过SwingSet学习如何使用Swing组件来构建自己的应用程序,并了解它们的默认行为和可定制性。 GenLAF(Generic Look and Feel)库则是为了帮助开发者轻松改变Java应用程序的视觉风格。Java标准库提供了两...
- **方法三**:在`swing.properties`配置文件中修改`swing.laf`属性。此文件通常位于JRE的lib目录下。 3. **外观选择的注意事项**: - `UIManager.getSystemLookAndFeelClassName()`会尝试根据用户的本地系统设置...
- `javax.swing.plaf`:Swing的外观和感觉(LAF)包,包含不同外观风格的实现,如基本的、金属的、多层的和合成的LAF。 - `javax.swing.table`:用于构建表格数据的组件。 - `javax.swing.text`:用于文本显示和编辑...
摇摆-htabs Swing 的分层选项卡。背景Java Swing UI 不支持创建分层选项卡(显示为树的选项卡)。 我们需要这个 。 我们找不到任何现有的库来实现这一点,因此这个项目。地位该库的当前状态是概念验证。 我们正在...
本篇将深入探讨如何使用"nimrodlf-1.0e"这个库来为Swing窗体更换皮肤,并调整其透明度。 NimrodLF是一个用于Swing的皮肤库,它提供了多种风格的外观,可以显著提升Swing应用的视觉效果。通过引入nimrodlf-1.0e.jar...
标题:“Luminescent properties of Nd^3^+-doped LaF3 core/shell nanoparticles with enhanced near infrared (NIR) emission”(掺Nd^3^+-的LaF3核/壳纳米颗粒的发光性质及增强的近红外(NIR)发射) 1. 纳米...
Java Swing 是 Java GUI(图形用户界面)开发的一个重要库,它是Java AWT(Abstract Window Toolkit)的扩展...通过学习和理解这些内容,开发者可以为自己的Java Swing应用添加类似的功能,提升其专业性和用户友好性。