javafx 自定义控件

自从我开始创建Nest恒温器FX自定义控件以来,已经有一段时间了! 因此,上次,正如Gerrit Grunwald所建议的那样,我花了一些时间使用inkscape复制Nest恒温器设计,这是构建JavaFX版本的第一步。

今天,我想与大家分享我尝试在JavaFX中创建它时所犯的错误,以及最终结果。

首先,我开始使用css文件来制作背景,该背景由我的inkscape版本的三个圆组成,带有三个线性渐变和twoa笔触。 正如Gerrit所建议的那样,我仅使用了一个Region并使用CSS设置了样式。

.nest{}.nest .frame {-fx-background-radius      : 1024px;-fx-background-insets      : 1, 4, 20;-fx-background-color         : linear-gradient(from 27.1% 6.5% to 77.35% 91%,  #e8e8e8 0%, #c6c6c6 50%, #a6a6a6 100%),linear-gradient(from 27.1% 6.5% to 77.35% 91%, #fdfdfd 0%,#ededed 3.552646%,#d7d7d7 7.277831%,#d2d2d2 11.973317%,#c7c7c7 18.269639%,#c1c1c1 25.449407%,#b0b0b0 32.21809%,#999999 37.210315%,#868686 43.145844%,#747474 49.577036%,#5c5c5c 55.667913%,#5a5a5a 61.299348%,#5e5e5e 68.340749%,#676767 76.115692%,#706e6f 82.365692%,#838383 88.148153%,#959595 93.637025%,#a8a8a8 100%),linear-gradient(from 27.1% 6.5% to 77.35% 91%, #1c1715 0%, #181818 50%, #3a3a3a 100%); -fx-border-radius      : 1024px;-fx-border-insets      : 0, 5, 20;-fx-border-width     : 0, 2, 1;-fx-border-color      : transparent, linear-gradient(from 27.1% 6.5% to 77.35% 91%, #d5d5d5 0%, #747474 50%, #8f8f8f 100%), #212121;
}

最终结果很好,但是当我调整控件大小时,由于-fx-background-insets和-fx-border-width是绝对像素值,因此结果很差。 您可以在下面看到我的问题。


我花了一些时间弄清楚该如何纠正。 最后,我唯一的想法是制作三个不同的区域并使用svg路径值。 它将纠正-fx-background-insets像素值,而不是笔划值。

.nest{}.nest .frame {-fx-shape          : "m 519.18435,179.4957 a 266.9594,266.9594 0 1 1 -0.72682,-2.0685";-fx-background-insets         : 1;-fx-background-color            : linear-gradient(from 27.1% 6.5% to 77.35% 91%,  #e8e8e8 0%, #c6c6c6 50%, #a6a6a6 100%);
}.nest .frame1 {-fx-shape           : "m 514.32688,181.18013 a 261.81818,261.81818 0 1 1 -0.71283,-2.02866";-fx-background-color          : linear-gradient(from 27.1% 6.5% to 77.35% 91%, #fdfdfd 0%,#ededed 3.552646%,#d7d7d7 7.277831%,#d2d2d2 11.973317%,#c7c7c7 18.269639%,#c1c1c1 25.449407%,#b0b0b0 32.21809%,#999999 37.210315%,#868686 43.145844%,#747474 49.577036%,#5c5c5c 55.667913%,#5a5a5a 61.299348%,#5e5e5e 68.340749%,#676767 76.115692%,#706e6f 82.365692%,#838383 88.148153%,#959595 93.637025%,#a8a8a8 100%);                             -fx-border-width        : 2;-fx-border-color        : linear-gradient(from 27.1% 6.5% to 77.35% 91%, #d5d5d5 0%, #747474 50%, #8f8f8f 100%);
}.nest .frame2 {-fx-shape           : "m 497.45305,187.03163 a 243.95858,243.95858 0 1 1 -0.66421,-1.89028";-fx-background-color          : linear-gradient(from 27.1% 6.5% to 77.35% 91%, #1c1715 0%, #181818 50%, #3a3a3a 100%); -fx-border-width       : 1;-fx-border-color        : #212121;
}

无论如何,当我尝试它时,这就是我得到的结果。

??? 这是什么 ??? 为什么我在这里只看到一个圆圈...嗯,我不得不说我花了一些时间来理解默认值是true的fx-scale-shape和fx-position-shape属性。 这里是这两个css属性的定义

-fx-位置-形状 <布尔值> 真正 如果为true,则表示该形状居于区域的宽度和高度的中心,否则该形状位于其源位置。 如果未指定形状字符串,则无效。
-fx比例形状 <布尔值> 真正 如果为true,则将缩放形状以适合区域的大小,否则,形状将处于其原始大小,并且其位置取决于position-shape属性的值。 如果未指定形状字符串,则无效。

因此,我只需要将比例值设置为false即可……但是,当我这样做时,更改控件大小时,无法正确调整区域中的形状大小……哎呀!

好吧,最终我尝试缩放区域并在调整控件大小时设置其prefSize。 所以我使用下面的代码片段:

private void resize() {size = getWidth() < getHeight() ? getWidth() : getHeight();final double scaleRatio = size / initialSize;frame.setPrefSize(size, size);frame.setScaleX(scaleRatio);frame.setScaleY(scaleRatio);frame1.setPrefSize(size, size);frame1.setScaleX(scaleRatio);frame1.setScaleY(scaleRatio);frame2.setPrefSize(size, size);frame2.setScaleX(scaleRatio);frame2.setScaleY(scaleRatio);
}

有效 !!!

好吧,我不知道这是否是正确的方法,但这是我到目前为止发现的唯一方法……任何使用其他技巧来解决我在本文中发现的问题的人,请在评论部分大声分享!

刻度和currentCursor和targetCursor使用RadialFX的RadialMenuItem完成 。 现在,它不允许我通过css对其进行自定义,但是现在我开始了解它是如何工作的,下一步是使用css属性来增强RadialFx RadialMenuItem。

在这里总结一下,是我今天取得的结果的一些视频。

  • 代码也将很快在JFXtras上可用!
参考: JavaFX自定义控件–我们JCG合作伙伴 Laurent Nicolas的Nest Thermostat第2部分 ,请访问LoNee先生博客。

翻译自: https://www.javacodegeeks.com/2014/02/javafx-custom-control-nest-thermostat-part-2.html

javafx 自定义控件

javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第2部分相关推荐

  1. javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第3部分

    javafx 自定义控件 嗨,经过与同事的讨论,我今天决定展示css方法并不是唯一可用于创建自定义控件的方法. 当然,它允许提供一些外观扩展点,但是可以使用代码API使用相同的方法(与向JavaFX的 ...

  2. javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第1部分

    javafx 自定义控件 几周前,由于Hendrik Ebbers的出色文章 ,我决定花一些时间观看有关JavaFX的JavaOne讨论. 我不得不说我已经学到了很多东西,只是看这些视频(即使我还没有 ...

  3. JavaFX自定义控件– Nest Thermostat第2部分

    自从我开始创建Nest恒温器FX自定义控件以来,已经有一段时间了! 因此,上次,如Gerrit Grunwald所建议,我花了一些时间用inkscape复制Nest恒温器设计,这是构建JavaFX版本 ...

  4. JavaFX自定义控件– Nest Thermostat第3部分

    嗨,经过与同事的讨论,我今天决定展示css方法不是唯一可用于创建自定义控件的方法. 当然,它允许提供一些外观扩展点,但是可以使用代码API使用相同的方法(与向JavaFX的转换)一起使用. 这是图形初 ...

  5. JavaFX自定义控件– Nest Thermostat第1部分

    几周前,由于Hendrik Ebbers的出色文章 ,我决定花一些时间观看有关JavaFX的JavaOne讨论. 我不得不说我已经学到了很多东西,只是看这些视频(即使我还没有完成)! Gerrit的& ...

  6. [WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互

    [WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互 原文:[WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互 1. 前言 WPF有一个灵活的 ...

  7. nest keyword_如何使用Nest Thermostat手动运行HVAC风扇

    nest keyword If you don't want to turn on the A/C in your house, but want to at least keep the air f ...

  8. javafx 自定义控件_JavaFX技巧10:自定义复合控件

    javafx 自定义控件 用JavaFX编写自定义控件是一个简单直接的过程. 需要一个控件类来控制控件的状态(因此命名). 外观需要控件的外观. 而且通常不是用于自定义外观CSS文件. 控件的一种常见 ...

  9. javafx 遮罩_JavaFX技巧31:遮罩/剪切/ Alpha通道

    javafx 遮罩 选择条 最近,我不得不实现一个自定义控件,该控件使用户可以从项目列表中选择一个项目. 此" SelectionStrip"控件必须水平放置项目,并且在项目过多的 ...

最新文章

  1. PVNet: 像素级投票网络估计6DoF位姿
  2. mitmdump脚本中使用requests模块发送请求
  3. 关于调用子函数给主函数指针分配内存
  4. Swing俄罗斯游戏编写详解(附源码)
  5. play!framework框架概述
  6. SRM 400(1-250pt, 1-500pt)
  7. 使用 SAP Business Application Studio 创建 Fiori Elements 应用显示 OData 服务的数据
  8. 【Java心得总结六】Java容器中——Collection
  9. C#开源资源大汇总(1)
  10. IO流 练习 -- 文件夹的删除
  11. java当前目录指什么_是什么决定了Tomcat Java进程的当前工作目录?
  12. 处理服务器故障的前5分钟(转)
  13. TCP通信过程中各步骤的状态---(简单解释)
  14. 利用XMLHTTP无刷新添加数据之Post篇(转)
  15. Win7 SP1语言包微软官方下载地址及使用方法
  16. micropython(esp8266)SG90舵机控制
  17. 解决wampserver server offline
  18. 如何判断一个程序没有响应
  19. 【土旦】vue项目中 使用 pako.js 解密 gzip加密字符串
  20. jquery高级之妙味云课堂笔记

热门文章

  1. ssl2293-暗黑游戏【dp练习题】
  2. codeforces1301 F. Super Jaber(多源bfs+枚举)
  3. Codeforces Round #670 (Div. 2)
  4. 史上最全Redis面试题
  5. 表扬几位积极的同学!
  6. Oracle数据库基本概念理解(2)
  7. SSM整合简单登录案例
  8. 比特(bit)和字节(byte)(1byte=8bit)
  9. spark sql uv_使用Spark Streaming SQL进行PV/UV统计
  10. xrkmonitor监控mysql_xrkmonitor字符云监控系统