繁体   English   中英

如何在ActionListener的其他类中使用方法?

[英]How do I use a method in a different class in ActionListener?

当我按下JButton button1 ,我需要在另一个类中调用dropPoison方法。 我该怎么做呢?

主班

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

public class Main extends JFrame implements ActionListener {
  private boolean PoisonTrue;
  private Player player1;
  private Player activePlayer;
  private boolean player1Poison;

  public Main() // creating the Frame
  {
    // code
  }

  public void actionPerformed(ActionEvent evt) {
    if (evt.getSource() instanceof TokenButton) {

      TokenButton button1 = (TokenButton) evt.getSource();

      if (PoisonTrue == true) {
        if (this.activePlayer == player1) {
          // Call dropPoison here
          player1Poison = true;
          PoisonTrue = false;
        }
      }
    }
  }
}

令牌按钮类

import java.awt.Color;
import java.util.ArrayList;

import javax.swing.JButton;

public class TokenButton extends JButton {

  ArrayList<Cell> cells;

  int nxtToken;

  TokenButton[] buttons;

  Grid gridPanel;

  public TokenButton() {
    nxtToken = 19;
    cells = new ArrayList<Cell>();
  }

  public int dropToken(Player player) {
    if (this.nxtToken != -1) {
      // code
    }

    return nxtToken;
  }

  public void dropPoison(Cell selectedCell, Grid grid) {
    int x = 0;
    int y = 0;
    this.gridPanel = grid;

    int xAxis = selectedCell.getXPosition();
    int yAxis = selectedCell.getYPosition();

    // North
    if (yAxis > 0) {
      grid.gridCells[x][y - 1].setBackground(Color.BLACK);
      grid.gridCells[x][y].setBackground(Color.GREEN);
    }
  }
}

在Main类中使用button1事件时,需要调用dropPoison方法。

因此,不要像使用instanceof来测试Button那样,而是要做类似的事情。

  • 在您的JFrame中创建一个按钮。
  • 向JButton实例注册一个动作侦听器。
  • 做您的工作吗?执行(即致电dropPoison)
  • 将JButton添加到JFrame。

您违反了许多以这种方式编写的OO约定。 建立以下示例:

public class Parent {
    private JFrame myFrame;
    public Parent() {
        myFrame = new JFrame();
        JButton button = new JButton();
        button.addActionListener(new ActionListener() {
            @Override 
            public void actionPerformed(ActionEvent theEvent) {
                call drop poison here or whatever method you need to call
            }
        });
        frame.add(button, BorderLayout.CENTER);  
    }

    public static void main(String[] args) {
        new Parent();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM