我正在参加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个不同的艺术家)。这是一个糟糕的方法吗?我似乎无法找到任何关于此的教程。我感谢任何人和所有帮助!
如果不在我的联赛中,我会很乐意选择另一个项目。谢谢你们!
答案 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更新。而不是在按钮监听器中拥有所有逻辑。