在BorderPane

时间:2016-06-06 12:20:42

标签: java swing javafx jlabel stage

我有一个 Java 项目通过 JavaFX Media Player 播放 .flv媒体文件,它运行正常。最近,我一直想通过将 GUI组件添加到此Project (JPanel,JLabel)来进行实验。但是,我在所有的尝试中都失败了,经过一些研究后发现它并不像我最初想的那么简单..我已经尝试了 borderPane.setTop(JLabel)但是我得到了一个“无法将Jlabel转换为Node”错误..我觉得我错过了什么

如果有人知道为什么这对我不起作用,我会非常感谢任何形式的解释或例子.. :)

这是代码,如果它可能对你有用!

@Override
public void start(Stage stage){
    String path = "Data/Video/Clip.flv";
    Media media = new Media(new File(path).toURI().toString());

    MediaPlayer mediaPlayer = new MediaPlayer(media);
    MediaView mediaView = new MediaView(mediaPlayer);

    BorderPane borderPane = new BorderPane();
    borderPane.setCenter(mediaView);

    //borderPane.add(logoPanel);                            <<<<<<< Error

    Scene scene = new Scene(borderPane, 1024, 800);
    scene.setFill(javafx.scene.paint.Color.BLACK);

    stage.setTitle("Media Player");
    stage.setScene(scene);
    stage.show();

    mediaPlayer.setAutoPlay(true);

2 个答案:

答案 0 :(得分:0)

您基本上想要实现的目标:将一些Swing组件添加到JavaFX应用程序中。

您必须使用SwingNode类来“包裹”JComponent

  

SwingNode类

     

JavaFX 8引入了SwingNode类,它位于   javafx.embed.swing包。这个类使您可以嵌入Swing   JavaFX应用程序中的内容。指定的内容   SwingNode对象,调用setContent方法,该方法接受一个   javax.swing.JComponent类的实例。

您可以查看this tutorial如何将Swing组件嵌入到JavaFX应用程序中。

将Swing Button置于BorderPane 中心的小例子:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root,400,400);

            SwingNode swingNode = new SwingNode();
            JButton jButton = new JButton("I am a Swing button");
            jButton.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Message from Swing");

                }
            });
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    swingNode.setContent(jButton);
                }
            });

            root.setCenter(swingNode);

            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

顺便说一下,BorderPane没有方法“添加”(如在您的评论行中):

您可以使用setCentersetTopsetBottomsetLeftsetRightNodes添加到其中(就像您以前填写的那样)中心)。

如果您的目标不是将Swing嵌入JavaFX ,只是为了使用JavaFX控件,您可以检查this article默认情况下JavaFX的控件。

答案 1 :(得分:0)

BorderPane是JavaFX节点,而JPanel是Java Swing组件。

你不能将一个JPanel添加到BorderPane,而你正在寻找的是JPFnel的JavaFX等价物,它是Pane类。

如果您正在使用JavaFX进行开发,那么使用JavaFX组件会更容易。如果您必须使用Swing组件,那么您可以使用SwingNode类。