В настоящее время я делаю 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 в приложение свинг с помощью JFXPanel
, который является Свинг компонент, который может отображать JavaFX- Scene
.
Но вы не сможете сделать это без графика сцены JavaFX.
Посмотрите учебник по оракулу по этой теме. Если вы не знакомы с графиками сцены javafx, вам, вероятно, следует прочитать руководство Getting Started with JavaFX.
CardLayout
,setVisible(false)
для родительского контейнера Swing,JTabbedPane
.