1

我正在上 Java 101 课程,老师尽她所能在这么短的时间内教给我们所有的材料。最终项目到期了,我一直在和我的合作伙伴一起开发 Java MP3 播放器。当我说 Java MP3 播放器时,想象一下您的计算机显示器上有一个专有的触摸屏 MP3 播放器。这就是我试图创造的。只是一组基本的按钮(艺术家、流派、歌曲等)。配有音量控制按钮和暂停歌曲的功能。(想象一下,我必须以某种方式集成 Windows Media Player)。

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

我花了很长时间弄清楚如何使交互式菜单工作。我在 HTML、CSS 和 JASS(魔兽争霸 3 专有语言)方面拥有丰富的编程经验,因此在物流方面我不是新手。到目前为止,我已经做到了,当您按下按钮时按钮上的文本会发生变化(模拟菜单更改),但我无法更改其他按钮文本(因为它们在不同的类中,并且无法解决)。我在这台电脑上没有我的代码,所以我不能告诉你我卡在哪里了..

基本上,我需要知道处理这个项目的最佳方法。我对 5 个按钮和使用 ActionListeners 手动创建交互式菜单有什么误解吗?(如果按钮上的文字 =“艺术家”,则将按钮 1、2、3、4、5 更改为5 位不同的艺术家)。这是一个不好的方法吗?我似乎找不到任何关于此的教程。我感谢任何和所有的帮助!

如果它超出我的范围,我会很乐意选择另一个项目。多谢你们!

4

1 回答 1

3

您想更新按钮和内容上的文本的方式是使用称为观察者模式的东西。

基本上你有某种模型,它包含正在播放的歌曲的所有数据,它是哪个艺术家等等。当数据发生变化时(例如:正在播放的歌曲),数据会告诉所有观察者(你的 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 更新。而不是在按钮侦听器中拥有所有逻辑。

于 2012-05-05T21:21:15.160 回答