【问题标题】:ActionListener and ActionEvent in separate classesActionListener 和 ActionEvent 在不同的类中
【发布时间】:2016-02-07 01:41:17
【问题描述】:

我正在制作一个井字游戏,并将我的 GUI 设置在它自己的类中,以及一个用于游戏逻辑的单独类和一个单独的主类。我需要做的是设置按钮事件,因此当玩家单击按钮时,图像图标将变为“X”或“O”。如何在我的 GUI 类中设置 ActionListener 但能够在我的游戏类中更改事件?

这是我目前的代码:

GUI类:

import javax.swing.*;
import java.awt.event.*;
public class TicTacToeGui {

private JFrame frame;
private JPanel panel;
public JButton btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9;

public void ticTacToeGui() {
    createForm();
    createButtons();

    frame.add(panel);
    frame.setVisible(true);


}

public void createForm() {
    frame = new JFrame();
    frame.setTitle("Tic Tac Toe");
    frame.setSize(618, 647);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    panel = new JPanel();
    panel.setLayout(null);


}

public void createButtons() {
    btn1 = new JButton();
    btn1.setBounds(0, 0, 200, 200);
    panel.add (btn1);

    btn2 = new JButton();
    btn2.setBounds(200, 0, 200, 200);
    panel.add (btn2);

    btn3 = new JButton();
    btn3.setBounds(400, 0, 200, 200);
    panel.add (btn3);

    btn4 = new JButton();
    btn4.setBounds(0, 200, 200, 200);
    panel.add (btn4);

    btn5 = new JButton();
    btn5.setBounds(200, 200, 200, 200);
    panel.add (btn5);

    btn6 = new JButton();
    btn6.setBounds(400, 200, 200, 200);
    panel.add (btn6);

    btn7 = new JButton();
    btn7.setBounds(0, 400, 200, 200);
    panel.add (btn7);

    btn8 = new JButton();
    btn8.setBounds(200, 400, 200, 200);
    panel.add (btn8);

    btn9 = new JButton();
    btn9.setBounds(400, 400, 200, 200);
    panel.add (btn9);
}

}

游戏类:

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

import javax.swing.Icon;
import javax.swing.ImageIcon;

public class OnePlayer {

TicTacToeGui gui = new TicTacToeGui();

public void gameStart() {

    gui.btn1.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent event) {
            Icon i = new ImageIcon("x.png");
            gui.btn1.setIcon(i);
        }
    });
}
}

【问题讨论】:

  • 更改事件是什么意思?您能否更具体地说明您想要实现的目标?
  • 我需要能够使用游戏类中的代码更改 GUI 类中按钮的图像图标。

标签: java


【解决方案1】:

在声明 gui 后,只需调用 gameStart()

public class OnePlayer 
{
   TicTacToeGui gui = new TicTacToeGui();
   gameStart();

   public void gameStart()
   {
      //your existing code
   }
}

虽然我不会走这条路。一个更好的方法是不要将您的按钮声明为公共字段。将动作侦听器的数组列表传递给 gui 类并在 OnePlayer 类中调用 action Performed,该类实际上将遍历侦听器并在每个侦听器上调用 actionPerformed。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多