如何在java中直接调用javaFX

如何在java中直接调用javaFX,第1张

当我们完成了MyScene类后,可以开始写Java的主程序了,这是个标卜绝准的Swing程序中调用JavaFX代码如下:

package swingtest/** * JavaFXToSwingTest.java http://www.javafxblogs.com * @author Henry Zhang */ import java.awt.* import javax.swing.* import org.jfxtras.scene.SceneToJComponentpublic class JavaFXToSwingTest extends JFrame { public static JTextField tf = new JTextField("JavaFX for SWING")public JavaFXToSwingTest() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE) setTitle("JavaFX in SWING Test")Container container = getContentPane() container.setLayout(new BorderLayout()) String sceneClass = "swingtest.MyScene" JComponent myScene = SceneToJComponent.loadScene(sceneClass) JLabel label = new JLabel(" Below is a JavaFX Animation: ") container.add(label, BorderLayout.NORTH) container.add(myScene, BorderLayout.CENTER) JPanel p = new JPanel() p.setLayout(new FlowLayout())tf.setColumns(28) p.add(tf) p.add(new JButton("SWING Button"))container.add(p, BorderLayout.SOUTH) pack() } public static void main(String args[]) { java.awt.EventQueue.invokeLater( new Runnable() { public void run() { new JavaFXToSwingTest().setVisible(true) } } } }

对大多数Java/Swing程序员来说,上述代码应该是很容易理解的。我们通过 BorderLayout和FlowLayout在Swing的窗口(JFrame)中布置了一些图形控件。有2行代码是和加载JavaFX的Scene相关的:

String sceneClass = "swingtest.MyScene" JComponent myScene = SceneToJComponent.loadScene(sceneClass)

其中SceneToJComponent类是从JFXtras项目中来的。它提供了loadScene()的方法,可以把JavaFX的Scene类加载到一个JComponent对象中, 从而可以型巧姿被Swing程序使用。运行这个程序,你可宽镇以看到一行文本”JavaFX for SWING”在窗口中央旋转。如果你在输入框中输入新的句子,你会发现旋转的文字也发生了改变。

在Swing程序中调用JavaFX代码是可行的,那么应该怎样编译和运行这样的程序呢。其实,JavaFX的功能也就是一些jar文件,因此和Java的结合方式还是比较简单的。编译的方法主要有两种,一种就是用JavaFX 的编译器Javafxc来编译Java和JavaFX代码。第二种就是用Javafxc编译JavaFX代码,用Javac编译Java代码,望采纳,谢谢。

1 内部匿名类和Lambda表达式

在之前派判友的例子上对

button.setOnAction(this)

进行更改

button.setOnAction(new EventHandler<ActionEvent>(){

@Override

public void handle(ActionEvent event){

System.out.println("I am an annonymous inner class")

}

})

此时点击按尘槐钮调用的时间就是我们后来修改的,不用去检验每个按钮的名字,直接在生成对象之后对象的方法上调用内部类,使得事件发生。"Click me"。

但是后来会出现一个问题。按照上一次的想法我们有很多个按钮的时候会写出if条件结构,然后还要冲孙去对应代码中的对象,但是都使用内部匿名类也不方便。

甲骨文公司在Java 8中开始加入了Lambda表达式,此时将这个语句改成如下:

button.setOnAction(e->System.out.println("heyyyyy, I am Lambda"))

此时控制台对我们点击了按钮进行回应:heyyyyy, I am Lambda,Java自动帮我们处理这个事件。同时也可以改成

button.setOnAction(e->{

System.out.println("heyyyyy, I am Lambda1")

fx:controller属性对应的是类名称

fx:controller ="类"

程序中是FXMLLoader来加载这个fxml文件

读入后对所在的FXMLLoader对启陪象上执悄如蠢行

MyController c=(MyController) fxmlloader.getController()

获橡岁得控制器


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12472468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存