2012-05-05 59 views
1

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

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

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

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

如果没有我的联盟,我会很乐意选择另一个项目。多谢你们!

+0

这对于“101”课程来说不是一个奇怪的项目吗?我认为那些主要应该教你如何使用该语言,而不是进入全面的GUI应用程序......(也仅供参考,HTML和CSS不是编程)。 –

+0

对,他们不是编程,但我只是想确认,我并不是新来的“编码”一般。我也了解Visual Basic。是的,这个班不是在公园散步。老师有点吹嘘什么,GUI应用程序是我身边真正的刺。 不要误解我的意思,这并不需要花哨。只是基本的按钮和功能。再次感谢!! :) – EnkeiRC5

回答

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更新的简短示例。而不是拥有按钮监听器中的所有逻辑。

+0

我还添加了一个按钮的示例实现,向您展示actionPerformed-methods中不需要复杂的逻辑,只需告诉模型您想要做什么(例如:更改歌曲)。 – pansarshrek