是否有在Swing应用程序中使用JavaFX Media和Media Player的解决方法?

时间:2014-05-27 07:07:25

标签: java swing javafx media

我目前正在使用Java制作MP3播放器,如果可能的话我想专门使用Swing GUI元素。但我还需要在我的程序中使用JavaFX中的Media和MediaPlayer类的功能。有没有办法在我的应用程序中只实例化这些逻辑元素而不用做场景等等的麻烦?老实说,我对它们了解不多,我似乎无法理解它上面的Oracle教程。 这是我将使用这些项目的地方: (我稍后将此课程称为主课程)

    class MP3Panel extends JFrame
    {
        private Media playingnow;
        private MediaPlayer player;

        public MP3Panel()
        {
            player = new MediaPlayer(intoMedia(playlist.getFirstSong()));

            player.setOnEndOfMedia(new Runnable() {

        @Override
        public void run() {
            if(playlist.nextSong(thissong)==null)
            {   player.stop();
                nowplaying.setText("");
            }    
            else
            {    
                player = new MediaPlayer(intoMedia(playlist.nextSong(thissong)));
                nowplaying.setText(thissong.printSongInfo());
                player.play();
            }    
        }
    }

    );

    ...
    private Media intoMedia(Song a)
    {

    thissong = a; 
    thisfile = new File(thissong.getFilename());
    thisURI = thisfile.toURI().toString();
    playingnow = new Media(thisURI);
    return playingnow;
    }

我也将它们用于ActionManager类:

    private class ActionManager implements ActionListener
{    
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == playbtn)
        {

            if(playbtn.getIcon() == play)
            {
                if(player.getStatus()==MediaPlayer.Status.STOPPED)
                {
                    player = new MediaPlayer(intoMedia(playlist.getFirstSong()));
                    nowplaying.setText(thissong.printSongInfo());
                }
                player.play();
                playbtn.setIcon(pause);
            }
            else
            {
                player.pause();
                playbtn.setIcon(play);
            }
        }
        if(e.getSource() == fwdbtn)
        {
            if(playlist.nextSong(thissong) == null)
            {    
                player.stop();
                playbtn.setIcon(play);
            }
            else
            {
                player = new MediaPlayer(intoMedia(playlist.nextSong(thissong)));
                nowplaying.setText(thissong.printSongInfo());
                player.play();
                playbtn.setIcon(pause);
            }
        }

那里还有一个向后和向前的按钮,但我认为这足以说明我的困境是什么。提前谢谢。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用JFXPanel将任何JavaFX用户界面嵌入到Swing应用程序中,这是一个可以显示JavaFX的Swing组件 - Scene

但如果没有JavaFX场景图,你将无法做到这一点。

查看有关此主题的oracle tutorial。如果你不熟悉javafx场景图,你应该阅读Getting Started with JavaFX教程。