Есть ли обходной путь к использованию JavaFX Media и Media Player в приложении Swing? [Дубликат]

1

В настоящее время я делаю MP3-плеер на Java, и я бы хотел использовать SWI-элементы исключительно, если это возможно. Но мне также нужна функциональность классов Media и MediaPlayer из JavaFX внутри моей программы. Есть ли способ создать только эти логические элементы в моем приложении без хлопот по созданию сцены и тому подобное? Я, честно говоря, не знаю много о них, и я не могу понять, насколько ясны учебники 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);
            }
        }

Есть также кнопки назад и вперед, но я думаю, этого достаточно, чтобы прояснить, какова моя дилемма. Заранее спасибо.

Теги:
javafx
media
swing

1 ответ

1

Да, вы можете возможность размещения пользовательского интерфейса JavaFX в приложение свинг с помощью JFXPanel, который является Свинг компонент, который может отображать JavaFX- Scene.

Но вы не сможете сделать это без графика сцены JavaFX.

Посмотрите учебник по оракулу по этой теме. Если вы не знакомы с графиками сцены javafx, вам, вероятно, следует прочитать руководство Getting Started with JavaFX.

  • 0
    И скажите, если я хочу только эту сцену для логических целей, есть ли способ скрыть эту сцену? Или, может быть, более элегантное решение?
  • 0
    "Есть ли способ скрыть эту сцену?" CardLayout , setVisible(false) для родительского контейнера Swing, JTabbedPane .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню