1

私は Java 101 のクラスを受講していますが、先生はできる限りのことをして、短い時間ですべての資料を教えてくれました。最終的なプロジェクトが予定されており、私はパートナーと一緒に Java MP3 プレーヤーに取り組んでいます。私が Java MP3 Player と言うときは、コンピューターのモニターに表示される専用のタッチスクリーン MP3 プレーヤーを想像してください。それは私が作成しようとしていたものです。ボタンの基本的な配列 (アーティスト、ジャンル、曲など)。ボリュームコントロールボタンと曲を一時停止する機能を完備。(どうにかして Windows Media Player を統合する必要があると想像してください)。

ああ、私は立ち往生しましたか。Javaで実際に曲を再生する方法を見つけましたが、最終的に必要になるWMPを使用していません。また、Photoshop で jpg を作成してプレーヤーの背景にし、画面に 5 つの JButton を投げました。

インタラクティブなメニューを機能させる方法を考え出すのに大変な時間を費やしています。HTML、CSS、JASS (Warcraft 3 専用言語) のプログラミング経験が豊富なので、ロジスティクスに関しては初心者ではありません。今のところ、ボタンを押すとボタンのテキストが変わるようにしましたが(メニューの変更をシミュレートしています)、他のボタンのテキストを変更することはできません(別のクラスにあり、対応できません)。私はこの PC に自分のコードを持っていないので、私が行き詰まっている場所を正確に示すことはできません..

基本的に、このプロジェクトに取り組むための最善のアプローチを知る必要があります。5 つのボタンと、ActionListeners を使用して手動でインタラクティブなメニューを作成するのは間違っていますか? (ボタンのテキスト = "Artists" の場合、button1、2、3、4、5 を5 つの異なるアーティストに変更します)。これは悪いアプローチですか?これに関するチュートリアルが見つからなかったようです。ありとあらゆる助けに感謝します!

それが私のリーグから外れている場合は、喜んで別のプロジェクトを選択します. みんなありがとう!

4

1 に答える 1

3

ボタンなどのテキストを更新する方法は、Observer パターンと呼ばれるものを使用することです。

基本的に、再生中の曲、アーティストなどのすべてのデータを保持するある種のモデルがあります。データが変更されると (例: 再生中の曲)、データはすべてのオブザーバー (GUI) に何かがあることを伝えます。更新された後は、すべてのデータをモデルから 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 に答える