首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在swing中使用JFXPanel集成fxml文件

在swing中使用JFXPanel集成fxml文件
EN

Stack Overflow用户
提问于 2014-04-25 11:38:44
回答 1查看 4.1K关注 0票数 2

我知道如何使用JFXPanel在swing中集成javafx组件。但是很难对组件的所有属性进行编码。此外,也不可能将css属性赋予javafx组件。那么,在JFXPanel中集成整个fxml文件是可能的吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-25 12:07:00

要将css属性赋予javafx组件,只需在JFXPanel上设置的场景中添加一个样式表即可。

要使用FXML定义显示在JFXPanel中的组件,可以像往常一样使用FXMLLoader加载FXML文件,并将结果用作JFXPanelScene的根。

例如:

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.io.IOException;

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Test {
    private void initSwingComponents() {
        JFrame frame = new JFrame("Java FX in Swing");
        frame.setLayout(new BorderLayout());
        final JFXPanel jfxPanel = new JFXPanel();
        frame.add(jfxPanel, BorderLayout.CENTER);
        final JPanel swingButtons = new JPanel();
        final JButton okButton = new JButton("OK");
        okButton.addActionListener(event -> System.out.println("Swing says 'OK'"));
        final JButton exitButton = new JButton("Exit");
        exitButton.addActionListener(event -> System.exit(0));
        swingButtons.add(okButton);
        swingButtons.add(exitButton);
        frame.add(swingButtons, BorderLayout.SOUTH);

        frame.setSize(300, 200);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
            okButton.requestFocus();

        Platform.runLater(() -> initFX(jfxPanel));
    }

    private void initFX(JFXPanel jfxPanel) {
        try {
            Parent root = FXMLLoader.load(getClass().getResource("FXComponents.fxml"));
            Scene scene = new Scene(root, 250, 150);
            scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
            jfxPanel.setScene(scene);
        } catch (IOException exc) {
            exc.printStackTrace();
            System.exit(1);
        }
    }

    public static void main(String[] args) {
        Test test = new Test();
        SwingUtilities.invokeLater(() -> test.initSwingComponents() );
    }
}

FXComponents.fxml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.Button?>

<VBox xmlns:fx="http://javafx.com/fxml" fx:controller="Controller" spacing="5" alignment="CENTER">
<TextField fx:id="textField" promptText="Enter message here"/>
    <Button text="Print message" onAction="#printMessage" />    
</VBox>

style.css:

代码语言:javascript
复制
@CHARSET "UTF-8";
.button {
    -fx-base: cornflowerblue ;
}
.text-field {
    -fx-text-fill: blue ;
    -fx-font-size: 18pt ;
}

Controller.java:

代码语言:javascript
复制
import javafx.fxml.FXML;
import javafx.scene.control.TextField;

public class Controller {
    @FXML
    private TextField textField ;

    @FXML
    private void printMessage() {
        System.out.println(textField.getText());
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23291993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档