JAVA 如何在swing 中将JAVAFX 的标签嵌入到JPanel 中?

标签 java swing javafx jpanel label

如何将使用 JAVAFX 创建的自定义标签嵌入到现有 swing 的 JPanel 中?

例如

自定义 JavaFX 标签:

public class CustomJavaFXLabel extends Label{
    public CustomJavaFXLabel(){
        super();    
        setFont("blah blah blah");
        setText("blah blah blah");
          /*
           *and so on...
           */
    }
}

Swing 中的现有 JPanel

public class SwingApp(){
    private JPanel jpanel;

    public SwingApp(){
        jpanel = new JPanel();
        jpanel.add(new CustomJavaFXLabel()); //this line does not work
    }
}

我得到的错误是:

The method add(Component) in the type Container is not applicable for argument (CustomJavaFXLabel)

我明白为此,我最好使用 JLabel 来创建自定义标签。但是,由于某些限制,我必须对自定义标签使用 FX。

谢谢。

最佳答案

如图JavaFX: Interoperability, §3 Integrating JavaFX into Swing Applications ,将自定义 javafx.scene.control.Label 添加到 javafx.embed.swing.JFXPanel .因为 JFXPanel java.awt.Container,所以它可以添加到您的 Swing 布局中。可以找到几个示例 here及以下。

label image

import java.awt.Dimension;
import java.awt.EventQueue;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javax.swing.JFrame;
/**
 * @see https://stackoverflow.com/q/41159015/230513
 */
public class LabelTest {

    private void display() {
        JFrame f = new JFrame("LabelTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JFXPanel jfxPanel = new JFXPanel() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(320, 240);
            }
        };
        initJFXPanel(jfxPanel);
        f.add(jfxPanel);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private void initJFXPanel(JFXPanel jfxPanel) {
        Platform.runLater(() -> {
            Label label = new Label(
                System.getProperty("os.name") + " v"
                + System.getProperty("os.version") + "; Java v"
                + System.getProperty("java.version"));
            label.setBackground(new Background(new BackgroundFill(
                Color.ALICEBLUE, CornerRadii.EMPTY, Insets.EMPTY)));
            StackPane root = new StackPane();
            root.getChildren().add(label);
            Scene scene = new Scene(root);
            jfxPanel.setScene(scene);
        });
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new LabelTest()::display);
    }
}

关于JAVA 如何在swing 中将JAVAFX 的标签嵌入到JPanel 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41159015/

相关文章:

java - 闪烁的托盘图标

java - 使用 JavaFX 8 场景,在运行时读取键盘输入

java - 如何从 JavaFX 中的 TableView 中删除复选框?

java - 为两个 JTextArea 设置事件监听器

java - 如何向 jtextfield 添加填充

java - StackedAreaChart 在后续数据重新填充 8 种颜色后的默认着色策略

java - 在 Spring Boot 中获取对当前 Activity 数据源的引用

java - maven-bundle-plugin 失败并显示 "Invalid class file module-info.class"

java - 为什么我可以在没有 android.permission.READ_CONTACTS 的情况下检索我的联系人?

java - maven 部署文件丢失/无效文件和/或 url