Java初学者需要指导(我需要用Java构建一个MP3播放器)

时间:2012-05-05 21:07:11

标签: mp3 actionlistener

我正在参加Java 101课程,老师尽其所能在如此短的时间内教我们所有材料。最终项目到期了,我和我的合作伙伴一直在研究Java MP3播放器。当我说Java MP3播放器时,想象一下计算机显示器上的专有触摸屏MP3播放器。这就是我想要创造的东西。只是一个基本的按钮阵列(艺术家,流派,歌曲等)。配有音量控制按钮,可以暂停一首歌曲。 (想象一下,我必须以某种方式集成Windows Media Player)。

男人,伙计,我被卡住了。我想出了如何用Java实际播放一首歌,但不是像我最终需要的那样使用WMP。我还在Photoshop中制作了一个jpg并将其作为我的播放器背景,并在屏幕上投掷了5个JButtons。

我正在花时间了解如何使交互式菜单正常工作。我在HTML,CSS和JASS(魔兽争霸3专有语言)方面有很多编程经验,所以在物流方面我不是新手。到目前为止,我已经按下按钮上的文字(模拟菜单更改),但是我无法更改其他按钮文本(因为它们位于不同的类中,并且无法解决)。我在这台电脑上没有我的代码,所以我无法准确地告诉你我被困在哪里..

基本上,我需要知道解决这个项目的最佳方法。 5个按钮是否全部错误,并使用ActionListeners手动创建交互式菜单? (IF按钮上的文字=“艺术家”,然后将按钮1,2,3,4,5更改为 5个不同的艺术家)。这是一个糟糕的方法吗?我似乎无法找到任何关于此的教程。我感谢任何人和所有帮助!

如果不在我的联赛中,我会很乐意选择另一个项目。谢谢你们!

1 个答案:

答案 0 :(得分:3)

您希望更新按钮和文本上的文本的方式是使用Observer模式。

基本上你有某种模型可以保存正在播放哪首歌的所有数据,它是哪个艺术家等等。当数据发生变化时(例如:正在播放的歌曲),数据会告诉所有观察者(你的GUI)更新了某些内容,然后您可以简单地将所有数据与模型中的getter一起提取到GUI。示例伪代码:

// this is our model
public class Mp3Player extends Observable {
    private MP3 songBeingPlayed;
    ...

    public setMp3(MP3 song){
        songBeingPlayed = song;
        setChanged();
        notifyObservers();
    }

    public void nextSong(){
        // Todo: Change song
        ...

        setChanged();
        notifyObservers();  // Notify GUI that something changed
    }
}

// this is our gui
public class GUI implements Observer {
    private Mp3Player player;
    private JLabel artistName;

    public GUI(){
         player = new Mp3Player();
         player.addObserver(this);
    }

    public void update(Observable o, Object o1){
         // This method gets called when the model calls notifyObservers()
         artistName.setText(player.getArtistName());
         ...
    }

}

// Button implementation
public class NextSongButton extends JButton implements ActionListener {

    private Mp3Player player;

    public NextSongButton(Mp3Player player){
        this.player = player;
        ...

        addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae){
        player.nextSong();
    }

}

这只是一个简短的例子,说明如何在模型更改时保持GUI更新。而不是在按钮监听器中拥有所有逻辑。