一个类中的多个ActionListener

时间:2013-10-26 21:32:12

标签: java swing actionlistener

我想在班上有多个ActionListener。我正在为一个项目制作一个简单的游戏,该项目有3个不同的级别,每个级别都有一定数量的按钮。

在每个级别之后添加新元素或组件。我的第一级有25个按钮,当按下它们时,它们会发出随机结果,这会增加你的分数。所有这些按钮都做同样的事情所以我决定使用ActionListener而不是每个按钮写出10 if个语句。问题是我想用我的第二级做到这一点但该类已经执行了已定义的操作。

是否有可能在同一个班级中拥有多个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;    
}

1 个答案:

答案 0 :(得分: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*/ }