0

ActionListenerクラスに複数の が欲しいです。3 つの異なるレベルがあり、各レベルに一定量のボタンがあるプロジェクト用の簡単なゲームを作成しています。

各レベルの後、新しい要素またはコンポーネントが追加されます。私の最初のレベルには 25 個のボタンがあり、1 つ押すとスコアに追加されるランダムな結果が出力されます。これらのボタンはすべて同じことを行うので、ボタンごとに 10 個のステートメントActionListenerを記述する代わりに、 を使用することにしました。if問題は、第 2 レベルでそれを実行したいのですが、クラスには既に定義済みのアクションが実行されています。

ActionListener同じクラスに複数いる方法はありますか?

これが私のActionPerformed方法です:

    public void actionPerformed(ActionEvent e) {
     JButton source = (JButton)e.getSource();

        Random RG = new Random();
        level_1_random_block = (RG.nextInt(6));

        frame2.setVisible(false);
        if (level_1_random_block == 0){
            source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreDiamond.png"));
            score += 100;
            initialize_score();
        }
        if (level_1_random_block == 1){
            source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreGold.png"));
            score += 25;
            initialize_score();
        }
        if (level_1_random_block == 2){
            source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreGold.png"));
            score += 25;
            initialize_score();
        }
        if (level_1_random_block == 3){
            source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreIron.png"));
            score += 5;
            initialize_score();
        }
        if (level_1_random_block == 4){
            source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\oreIron.png"));
            score += 5;
            initialize_score();
        }
        if (level_1_random_block == 5){
            source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\creeper.png"));
            score -= 30;
            initialize_score();

            try {
                Clip clip = AudioSystem.getClip();
                clip.open(AudioSystem.getAudioInputStream(new File("C:\\Users\\Liam\\Desktop\\BOMB GAME\\creeper_sound.wav")));
                clip.start();
            }
            catch (Exception exc){

            }

        }
        if (level_1_random_block == 6){
            source.setIcon(new ImageIcon("C:\\Users\\Liam\\Desktop\\BOMB GAME\\creeper.png"));
            score -= 30;
            initialize_score();
        }

        source.removeActionListener((ActionListener) this);
        level_1_move_on = true;
        continue_game();

}
public void EventHandler(int level_1_random_block) {
   this.level_1_random_block = level_1_random_block;    
}
4

1 に答える 1

1

内部クラスを実行できます:

button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ */Code goes here*/ } }) (actionListener を変数に保存し、多くのボタンに設定します)

異なるボタンに対してこれを複数回行うと、複数のActionListenersがあります。

アクション コマンドを設定することもできます。 button.setActionCommad("lvl1");

actionPerformed(ActionEvent e)次の場合に確認でき ます。if(e.getActionCommand.equals("lvl1")) { /*code*/ }

于 2013-10-27T15:26:55.020 に答える