最近需要用Java编写一个视频播放器,通过网上找教程,发现利用JavaFX程序库最合适。再初步学习了JavaFX的教程后,确实能够很快速的搭建一个功能完善的视频播放器。但是问题来了,JavaFX自带有一套完整的交互组件,例如FXTextField, FXLabel等,类似于Swing里的同名组件。然而JavaFX运行的时候同样有自己独立的Thread,这让将JavaFX整合到现有Swing组件中,常常因为两个程序库的Threads不同,无法进行交互,从而无法将两者整合在一起。
尽管JavaFX与Swing在命名方式上非常类似,其Node以下的组件运用也很相似,但JavaFX的最顶层结构Stage/JFXPanel(在JavaFX中,其JFXPanel与Stage似乎属于相同等级,下文会提到JFXPanel的重要性和使用方法)与Swing的JFrame结构,有着巨大的差别。只有了解这些差别,才能够很好的将两个程序库融合使用。下图引用自2.0版本的官方教程,尽管最新的版本已经到12.0,JavaFX的总体结构依旧如此。最顶层的Stage可以被理解为类似JFrame的框架。与JFrame不同的地方在于,往JFrame里添加组件,用的是“添加”逻辑。即:
JFrame.add(JComponent)
而给Stage添加显示组件,用的是“设立”的逻辑,即:
Stage.setScene(Scene)
在JavaFX中,Scene类似于显示窗口。所不同的在于,一个Stage只能有一个Scene。而JFrame,可以添加多个JPanel,而一个JPanel自己,也能再往下套用更多的子JPanel。在JavaFX的Scene的