2012-05-05 62 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