首页 > 解决方案 > 带有 JButton 的 ActionListener 问题

问题描述

我正在为我的第一个 Java 课程开发一个游戏。我必须用两个不同的动作监听器创建两个不同的按钮。TreasureButton 从 EmptyButton 扩展而来,每个都有不同的侦听器。

我遇到的问题是,当我尝试在空按钮侦听器中设置测试时,它会覆盖 TreasureButton 侦听器。例如,宝藏按钮文本设置为“$”。如果我将空按钮文本设置为“X”,那么所有按钮都会显示为“X”,即使它是宝藏。我还必须创建最后移动标签和文本字段。当我在空按钮侦听器下运行该方法以将最后一步作为“胸围”执行时,即使我发现宝藏,它也只会说“胸围”。我在我的 TreasureButtonListener 类中尝试了@Override,但它没有改变任何东西。对此有何指导?

import javax.swing.*;
public class EmptyButton extends JButton
{
    //has-a TreasureGame
    private TreasureGame game;
    
    //has-a TreasureGameView
    private TreasureGameView gameView;
    
    public EmptyButton(TreasureGame game, TreasureGameView gameView)
    {
        super();
        setText("X");
        this.game = game;
        this.gameView = gameView;
        
        addActionListener(new EmptyButtonListener(this, game, gameView));
    }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
public class TreasureButton extends EmptyButton
{
   
   public TreasureButton(TreasureGame game, TreasureGameView gameView)
   {
       super(game, gameView);
       
       //setText("$"); 
       addActionListener(new TreasureButtonListener(this, game, gameView));
   }
   
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EmptyButtonListener implements ActionListener
{
    private EmptyButton button;
    //has-a TreasureGame
    private TreasureGame  game;
    //has-a TreasureGameView
    private TreasureGameView gameView;
    
    public EmptyButtonListener(EmptyButton button, TreasureGame game, TreasureGameView gameView)
    {
        this.game = game;
        this.button = button;
        this.gameView = gameView;
    }
    
    public void actionPerformed(ActionEvent e)
    {
        //button.setText("X");
        button.setEnabled(false);
        game.reduceTriesLeft();
        //game.treasureNotFound();
        game.isGameOver();
        
        gameView.updateUI();
    }
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TreasureButtonListener implements ActionListener
{
    
    
    // Has-a TreasureButton
    private TreasureButton button;
    private TreasureGame game;
    private TreasureGameView gameView;
    
    public TreasureButtonListener(TreasureButton button, TreasureGame game, TreasureGameView gameView)
    {
        
        this.button = button;
        this.game = game;
        this.gameView = gameView;
    }
    
    public void actionPerformed(ActionEvent e)
    {
        
        button.setText("$");
        game.reduceNumberStillHidden();
        game.treasureFound();
        
        game.isGameOver();
        gameView.updateUI();
    }
}

标签: javaswingawtjbuttonactionlistener

解决方案


推荐阅读