说到Applicaton这个抽象类,相信除邪典FX开发者外(买个坑,后续讲JavaFX邪典开发)所有的JavaFX开发者都相当熟悉。
--毕竟都是老朋友了(
但是相信绝大多数人对其的映像都还停滞在“JavaFX”程序启动类的阶段,今天闲来无事(不知道聊啥),[JavaFX详解篇]正式开启,我会在此篇章向大家介绍JavaFX的有趣知识。
在开始之前,我向大家介绍两个Application类的常量:STYLESHEET_CASPIAN、STYLESHEET_MODENA。
有的人可能在翻阅源码时看见过这两个东西但没有在意,有的人可能会说还有这东西
根据源代码可知他们俩的赋值分别为:CASPIAN、MODENA。
而其的含义就是用户样式类的意思,两个不同的常量表示两个不同的样式类,前者是JavaFX 2.x版本的显示样式,后者则是8.x版本。
知道这个知识,我们就来看看如何使用它。在JavaFX的Applicaton类中存在着两个静态方法:getUserAgentStylesheet()、setUserAgentStylesheet(String url)。
他们俩分别是获取当前用户代理样式表和设置上当前用户代理样式表。
有趣的是如果你尝试在未手动设置的情况下调用getUserAgentStylesheet(),它绝对会返回一个null。
不过按理来说作为一个样式类,应该都有一个默认的样式打底作为程序的基础样式,为什么此处返回的结果却是个null?
对于这个问题我们先不着急去看,我们优先介绍一下setUserAgentStylesheet(String url)方法,他接受一个url作为参数,有没有什么其他隐藏的样式我不知道,但是在上面我们介绍的两个常量就是此方法的参数。
这个方法诞生的意义是为了保证旧的ui样式的一致性,作者通过指定这个属性可以确保自己的程序不会被新版的JavaFX的样式改变。
以下是这个方法的实现:

我们发现它其实对null值做了判断,当我们的参数为null时,会调用PlatformImpl.setDefaultPlatformUserAgentStylesheet();。
在深入这个方法的调用后便不难看出来,上一个问题的答案已经呼之欲出:JavaFX是拥有基本样式且基本样式正是我们前面介绍的两个常量之一:STYLESHEET_MODENA

那么另一个样式的模样是什么呢?以下是我编写的一个测试UI,使用了默认的STYLESHEET_MODENA作为样式

接下来我在程序启动前使用方法Application.setUserAgentStylesheet(STYLESHEET_CASPIAN);

而这就是他们之间的区别
讲完这些之后首当其冲的便是我们使用的重量级方法launch!他在类中拥有多种重载,(Class<? extends Application> appClass, String... args)与(String... args)。
顾名思义,此方法接收两种参数:一个是需要启动的Applicaton实例类,一个是由于托管的参数列表。
两个方法的使用场景也各不相同,第一个方法(Class<? extends Application> appClass, String... args)可以在任何地方进行调用,毕竟它已经指定了要启动的类。
而第二个方法只能位于继承了Application类中,这样的逆天条件让这个方法在所有未内置了JavaFX组件的jdk中会产生严重问题:请使用JavaFX组件启动程序,这在之前我的贴子里有讲。
好了,让我们实例篇再见!
--毕竟都是老朋友了(
但是相信绝大多数人对其的映像都还停滞在“JavaFX”程序启动类的阶段,今天闲来无事(不知道聊啥),[JavaFX详解篇]正式开启,我会在此篇章向大家介绍JavaFX的有趣知识。
在开始之前,我向大家介绍两个Application类的常量:STYLESHEET_CASPIAN、STYLESHEET_MODENA。
有的人可能在翻阅源码时看见过这两个东西但没有在意,有的人可能会说还有这东西
根据源代码可知他们俩的赋值分别为:CASPIAN、MODENA。
而其的含义就是用户样式类的意思,两个不同的常量表示两个不同的样式类,前者是JavaFX 2.x版本的显示样式,后者则是8.x版本。
知道这个知识,我们就来看看如何使用它。在JavaFX的Applicaton类中存在着两个静态方法:getUserAgentStylesheet()、setUserAgentStylesheet(String url)。
他们俩分别是获取当前用户代理样式表和设置上当前用户代理样式表。
有趣的是如果你尝试在未手动设置的情况下调用getUserAgentStylesheet(),它绝对会返回一个null。
不过按理来说作为一个样式类,应该都有一个默认的样式打底作为程序的基础样式,为什么此处返回的结果却是个null?
对于这个问题我们先不着急去看,我们优先介绍一下setUserAgentStylesheet(String url)方法,他接受一个url作为参数,有没有什么其他隐藏的样式我不知道,但是在上面我们介绍的两个常量就是此方法的参数。
这个方法诞生的意义是为了保证旧的ui样式的一致性,作者通过指定这个属性可以确保自己的程序不会被新版的JavaFX的样式改变。
以下是这个方法的实现:

我们发现它其实对null值做了判断,当我们的参数为null时,会调用PlatformImpl.setDefaultPlatformUserAgentStylesheet();。
在深入这个方法的调用后便不难看出来,上一个问题的答案已经呼之欲出:JavaFX是拥有基本样式且基本样式正是我们前面介绍的两个常量之一:STYLESHEET_MODENA

那么另一个样式的模样是什么呢?以下是我编写的一个测试UI,使用了默认的STYLESHEET_MODENA作为样式

接下来我在程序启动前使用方法Application.setUserAgentStylesheet(STYLESHEET_CASPIAN);

而这就是他们之间的区别
讲完这些之后首当其冲的便是我们使用的重量级方法launch!他在类中拥有多种重载,(Class<? extends Application> appClass, String... args)与(String... args)。
顾名思义,此方法接收两种参数:一个是需要启动的Applicaton实例类,一个是由于托管的参数列表。
两个方法的使用场景也各不相同,第一个方法(Class<? extends Application> appClass, String... args)可以在任何地方进行调用,毕竟它已经指定了要启动的类。
而第二个方法只能位于继承了Application类中,这样的逆天条件让这个方法在所有未内置了JavaFX组件的jdk中会产生严重问题:请使用JavaFX组件启动程序,这在之前我的贴子里有讲。
好了,让我们实例篇再见!
