首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JPanel中添加BorderPane

在JPanel中添加BorderPane
EN

Stack Overflow用户
提问于 2016-06-06 12:20:41
回答 2查看 1.6K关注 0票数 0

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

如果有人知道为什么这不适合我,我会非常感谢任何形式的解释或例子。:)

这是代码,如果它对你有用的话!

代码语言:javascript
复制
@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);
EN

回答 2

Stack Overflow用户

发布于 2016-06-06 12:27:36

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

您必须使用SwingNode类来“包装”一个JComponent

SwingNode类 JavaFX 8引入了位于javafx.embed.swing包中的SwingNode类。此类使您能够在JavaFX应用程序中嵌入Swing内容。若要指定SwingNode对象的内容,请调用setContent方法,该方法接受javax.swing.JComponent类的实例。

您可以检查本教程如何将Swing组件嵌入到JavaFX应用程序中。

将Swing Button BorderPane 放入BorderPane中心的小示例

代码语言:javascript
复制
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 没有方法"add“(如您的注释行中所示):

您可以使用setCentersetTopsetBottomsetLeftsetRightNodes添加到其中(就像过去填充中心一样)。

如果您的目标不是将Swing嵌入到JavaFX中,只是为了使用JavaFX控件,则可以默认检查这篇文章控件JavaFX有哪些控件。

票数 0
EN

Stack Overflow用户

发布于 2016-06-06 12:28:43

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

您不能将JPanel添加到BorderPane中,相反,您要寻找的是与JPanel (即窗格类)等价的JavaFX。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37657334

复制
相关文章

相似问题

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