gpt4 book ai didi

java - 从操作监听器获取 JPanel 中按钮数组的值时遇到问题

转载 作者:行者123 更新时间:2023-12-01 09:56:08 25 4
gpt4 key购买 nike

我正在尝试向 TicTacToe 的 GUI 游戏添加逻辑。游戏类设置了一个按钮面板并按预期工作(我将其代码放在这里以防需要)。我希望在 Button 类中添加一个检查器方法。然而,我有一个巨大的障碍,我想不出解决方案来解决。

我希望检查器方法以某种方式获取在 Button 类的 actionPerformed 方法中分配的特定按钮的值。例如,如果一行中 3 个连续按钮具有相同的值,则根据该值 X 或 O 获胜。我不确定我的设置方式是否允许这样做,但我认为有一种我可能没有考虑的方法。

<小时/>

游戏类

创建按钮数组,按钮是使用 Button 类制作的。

import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.GridLayout;

public class game extends JFrame {
JPanel buttonBoard = new JPanel();
Button buttons[] = new Button [9];

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

public game() {
super("TicTacToe");
setSize(600, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);

buttonBoard.setLayout(new GridLayout(3,3));

for(int i = 0; i < 9; i++) {
buttons[i] = new Button();
buttonBoard.add(buttons[i]);
}

add(buttonBoard);
setResizable(false);
}

}

按钮类

创建一个 XO 图像图标。有一个 ActionListener 来相应地设置按钮。

import javax.swing.JButton;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Button extends JButton implements ActionListener {
ImageIcon x, o;
byte value = 0;

public Button() {
x = new ImageIcon(this.getClass().getResource("x.png"));
o = new ImageIcon(this.getClass().getResource("o.png"));

this.addActionListener(this);
}

public void checker(Button array[]) {
array[i].
}

public void actionPerformed(ActionEvent event) {
value++;

if (value > 2)
value = 0;

switch(value) {
case 0:
setIcon(null);
break;

case 1:
setIcon(x);
break;

case 2:
setIcon(o);
break;

}

}

}

如果需要更多信息,请发表评论。这是我第一次编写 GUI 程序,我正在努力学习,所以如果您有任何提示,我也将不胜感激。

谢谢大家!

最佳答案

我同意上面的评论,最好将逻辑保留在 View 组件之外。为了帮助解决有关获取数组值的原始问题,这里有一个快速示例,根据您提供的代码可能会有所帮助

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

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Game extends JFrame {

JPanel buttonBoard = new JPanel();
Button buttons[] = new Button [9];
boolean playerOne = true;

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

public Game() {
super("TicTacToe");
setSize(600, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);

buttonBoard.setLayout(new GridLayout(3,3));

final ActionListener listener = new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof Button) {
if (isPlayerOne()) {
((Button) e.getSource()).setValue(1);
} else {
((Button) e.getSource()).setValue(2);
}
nextPlayer();
}
}
};

for (int i = 0; i < 9; i++) {
buttons[i] = new Button(0);
buttons[i].addActionListener(listener);
buttonBoard.add(buttons[i]);
}

add(buttonBoard);
setResizable(false);
}

private boolean isPlayerOne() {
return playerOne;
}

private void nextPlayer() {
playerOne = !playerOne;
}

public class Button extends JButton {

ImageIcon x, o;
int value = 0;

public Button(int initialValue) {
x = new ImageIcon(this.getClass().getResource("x.png"));
o = new ImageIcon(this.getClass().getResource("o.png"));
}

public int getValue() {
return value;
}

public void setValue(final int valueIn) {
value = valueIn;
updatedIcon();
}

private void updatedIcon() {
switch(value) {
case 0:
setIcon(null);
break;

case 1:
setIcon(x);
break;

case 2:
setIcon(o);
break;

}
}
}
}

关于java - 从操作监听器获取 JPanel 中按钮数组的值时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com