JavaFX团队非常努力地说服我们,因为可以将Swing内容嵌入JavaFX UI中,因此可以很容易地从Swing迁移到JavaFX。 我必须承认,我从来没有亲自尝试过,但是根据我从客户那里得到的反馈,我只能建议不要将Swing和JavaFX混合使用。 在撰写本文时,与Swing集成(在JavaFX问题管理系统中注册)相关的未解决问题(120多个错误)已超过200个。
发行类型
以下是如果您仍然决定使用它可能遇到的问题列表:
- 外观 –在Swing中完成的部分与在JavaFX中完成的部分之间总会有明显的差异。 字段将显示不同的字体质量 ,不同的边框,不同的焦点突出显示等。
- 闪烁 –您可能会在用户界面中遇到闪烁
- 行为 -控件的行为会有所不同。 用户将可以使用手势滚动JavaFX控件,但不能滚动Swing控件。 双击两个列标题之间的行时,JavaFX TableView控件的列将自动调整大小,而Swing JTable则不会。
- 线程 –您一直在处理与使用两个不同的UI线程(Swing EDT和JavaFX应用程序线程)有关的问题。 您将遇到死机的UI和不一致的状态问题。
- 窗口管理 –很难/不可能控制哪个窗口将在哪个其他窗口之上以及哪个窗口阻止其他窗口的输入(模态) 。 弹出窗口可能不再自动隐藏 。
- 焦点处理 – 错误的窗口可能会引起焦点。 Swing控件和JavaFX控件之间的焦点遍历可能不起作用。
- 上下文菜单 –您可能无法通过单击UI的其他位置来关闭菜单,或者最终可能同时打开两个上下文菜单(一个由JavaFX控制,一个由Swing控制)。
- 光标 –在不同的控件/组件上设置不同的光标将无法正常工作 。
- 拖放 – 无论是在SwingNode本身内还是在Swing与JavaFX之间,异常都将继续存在。
- 性能 -混合了Swing组件的JavaFX控件的性能/渲染速度将降低 。
结论
这是什么意思? 好吧,这意味着如果您遵循Swing / JavaFX混合策略,最终将不会节省时间。 至少如果质量对您而言不重要。 如果您只关注使功能可用,那么,也许可以,但是如果您想发布商业化的研究生/专业应用程序,则不会。
如果您已决定迁移到JavaFX,那么请执行Full Monty并在JavaFX中重做整个应用程序,这是值得等待的。
翻译自: https://www.javacodegeeks.com/2014/07/javafx-tip-9-do-not-mix-swing-javafx.html