JavaFX的2.0 - 风格/模板的现有控制(JavaFX 2.0 - style / temp

2019-07-31 12:46发布

我非常有经验与WPF和新的JavaFX 2.0。 我即将Silverlight项目移动到的JavaFX 2.0。 两个Apress出版的书籍和若干线程不能回答我的问题(也许我看不到或了解的答案,因为我的WPF影响的预期)。

我需要的是与单选按钮的功能,但一个完全不同的UI控件。 我的单选按钮具有文本下方的文本,图像,没有按钮,线(矩形)。 如果未选择的单选按钮,文本和图像是透明的,将图像灰度化和矩形不可见的。 如果被选中,在文字和图片是不透明的,图像颜色和矩形(通过动画的所有变化)变得可见。

我知道如何皮肤现有的JavaFX 2.0的控制,但我不知道如何风格/皮肤的单选这种方式。

在WPF我只需要创建一个新的模板,我的单选按钮的风格......正如我所说,也许这些WPF影响预期的JavaFX 2.0是我的障碍。

谢谢...

编辑:

好像它是不可能创造现有的控制另一个模板(?): JavaFX的2.0渲染内部控制控制

那么,什么是执行我的单选按钮的最好方法? 我理会ToggleGroup ...

Answer 1:

有许多方法来样式或模板的JavaFX控制。

  1. 预建JavaFX的控制是通过设置样式的CSS 。

  2. 预建的JavaFX控件也可以被继承来修改他们的功能和外观和感觉。 一个例子是IntField,它创建定制以仅编辑整数一个TextField。

  3. 通常情况下,你可以通过将一束现有控件一起在布局构建自定义组件窗格或集团 。 通过参数有构成联军组件的方法或类,可以有效模板,通过代码自定义组件建设。 下面是一个例子的数字和模拟时钟的部件使用这样的方法(和通过CSS设置样式)构建的。

  4. 您还可以通过不同的FXML文件中使用的方法在管理的自定义组件的布局介绍FXML文件 。 该FXML可以从使用模板语言等生成的速度 ,或者几个不同的静态FXML文件可以用于不同的布局来写。 静态或产生FXML也可以动态地从一个网络服务器,如果需要服务,像一个动态生成HTML的网站。

  5. 你可以创建自定义控制的另一种方法是JavaFX的团队做同样的方式(通过控制产生皮肤和行为的类)。 作为JavaFX的2.2(甚至在未来的JavaFX版本),这是最适合的库的创造者,比如那些工作jfxtras或直接带动开放式源代码控制库 JavaFX的项目。

  6. 还要注意的是,在CSS中,你可以指定一个控制皮肤类,例如单选按钮具有以下的CSS:

    .radio-button {
        -fx-skin: "com.sun.javafx.scene.control.skin.RadioButtonSkin";
    }

因此,定制为您所考虑的单选按钮的外观的一个方法是:

  1. 抢副本RadioButtonSkin来自开源JavaFX的库我在前面挂类源。
  2. 它复制到一个新的类名(如LinedRadioButtonSkin)。
  3. 修改它来获得你想要的外观。
  4. 为项目创建一个自定义的CSS样式表。
  5. 在自定义CSS样式表设置-fx-skin的属性.radio-button类使用新LinedRadioButtonSkin类。

只要你的新皮肤的正确实施和有线到现有ButtonBehaviour类似于现有RadioButtonSkin类的工作类,那么你就应该自动获得了为现有的单选按钮中选择新的皮肤基于单选按钮相同的行为。 例如,该按钮将鼠标点击,键盘快捷键响应,触摸事件,ToggleGroups等互动,完全一样,现有的RadioButtonSkin和利用现有的可访问单选按钮的API。 即,按钮保留了单选按钮的感觉(行为),但可以有一个通过使用不同的内部组件,布局和CSS样式完全不同。

如果你决定去自定义皮肤路线,需要在这个过程中提供帮助,考虑联系jfxtras团队成员和捐赠新的皮肤对jfxtras项目。

警告

使用JavaFX 2.2的皮肤和行为类是私有实现的API,没有公开支持的API,并为他们过渡到公共API(定为JavaFX的下一个主要版本 - 的JavaFX / JDK 8) - 在未来将改变,因此,如果您使用的这些今天,谨慎操作。 一旦过渡到公共API,我想你会看到如何创建使用这些类你自己控制的更多信息和教程。

该包名和API方法将作为API构建从内部私有实现皮肤和行为转变自己的控件以公共API改变。 例如com.sun.javafx.scene.control.behavior.BehaviorBase可能成为javafx.scene.control.behavior.Behavior ,因此,如果您创建扩展BehaviorBase一类,它不会运行对JavaFX的新版本,直到你修改类的源以引用新名称和API,并重新编译它。

出于相同的原因,将有关于这个主题没有好书,直到API是公开的,最终因为任何示例代码包含在书里面写反对私有API将尽快API是公开的,并会过时既不无法编译对公共API,也不执行对JavaFX的新版本。



文章来源: JavaFX 2.0 - style / template existing control