gpt4 book ai didi

java - 将递增/变化的字符串值转换为 JButtons 的现有增量变量名称,以修改其在 java 中的属性

转载 作者:行者123 更新时间:2023-12-01 21:54:29 24 4
gpt4 key购买 nike

简化:How to make String value to call specific existed JButton variable name in java?

我正在尝试制作一款非普通的 Tic-Tac-Toe 游戏...

无论如何,我在这里发布的并不是整个概念。我只是想让它变得简单:我有 9 个名为(3 x 3)的方形 jButton(并且可能允许用户通过将来的设置制作 4x4、5x5、10x10 等):

[markbox_00_00] / [markbox_00_01] / [markbox_00_02]

[markbox_01_00] / [markbox_01_01] / [markbox_01_02]

[markbox_02_00] / [markbox_02_01] / [markbox_02_02]

[btnSave] / [btnUndoActions]

其中前两位数字代表行,接下来的两位数字代表列;以及保存按钮 (btnSave) 和撤消按钮 (btnUndoActions)。

每个标记框的默认 Spring 值为“0”,当我单击时它会变成“1”;当我点击“1”时,它变成“0”。当您按下撤消按钮时,它将重置为上次保存的状态。

这是我的一些简化的代码行:

private byte markboxColLimit = 3, markboxRowLimit = 3, row, col;
private byte[][] saveNumber = new byte[markboxRowLimit][markboxColLimit];
private String buttonName;

public Astral_TicTacToe() {
initComponents();

/* I want something like this, but using a for loop based on markboxColLimit and
markboxRowLimit as limits */

markbox_00_00.setText("0");
markbox_00_01.setText("0");
markbox_00_02.setText("0");
markbox_01_00.setText("0");
markbox_01_01.setText("0");
markbox_01_02.setText("0");
markbox_02_00.setText("0");
markbox_02_01.setText("0");
markbox_02_02.setText("0");

/* I know the line below is wrong... what I'm trying is to avoid
* repetitiveness by looping and dynamically calling the variable
* name of JButtons, or in other ways...
*/
    /* Attempting to make an alternative code from above (trying to make a loop instead) */

for(row = 0; row < markboxRowLimit; row++){

for(col = 0; col < markboxColLimit; col++){
buttonName = "markbox_0" + Byte.toString(row) + "_0" + Byte.toString(col);

buttonName.setText("0");
}
}
}

private void btnUndoActionsActionPerformed(java.awt.event.ActionEvent evt) {

markbox_00_00.setText(Byte.toString(saveNumber[0][0]));
markbox_00_01.setText(Byte.toString(saveNumber[0][1]));
markbox_00_02.setText(Byte.toString(saveNumber[0][2]));
markbox_01_00.setText(Byte.toString(saveNumber[1][0]));
markbox_01_01.setText(Byte.toString(saveNumber[1][1]));
markbox_01_02.setText(Byte.toString(saveNumber[1][2]));
markbox_02_00.setText(Byte.toString(saveNumber[2][0]));
markbox_02_01.setText(Byte.toString(saveNumber[2][1]));
markbox_02_02.setText(Byte.toString(saveNumber[2][2]));
}

private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {
saveNumber[0][0] = Byte.parseByte(markbox_00_00.getText());
saveNumber[0][1] = Byte.parseByte(markbox_00_01.getText());
saveNumber[0][2] = Byte.parseByte(markbox_00_02.getText());
saveNumber[1][0] = Byte.parseByte(markbox_01_00.getText());
saveNumber[1][1] = Byte.parseByte(markbox_01_01.getText());
saveNumber[1][2] = Byte.parseByte(markbox_01_00.getText());
saveNumber[2][0] = Byte.parseByte(markbox_02_00.getText());
saveNumber[2][1] = Byte.parseByte(markbox_02_01.getText());
saveNumber[2][2] = Byte.parseByte(markbox_02_02.getText());
}

private void markbox_00_00ActionPerformed(java.awt.event.ActionEvent evt) {
if("0".equals(markbox_00_00.getText()))
markbox_00_00.setText("1");
else
markbox_00_00.setText("0");
}

private void markbox_00_01ActionPerformed(java.awt.event.ActionEvent evt) {
if("0".equals(markbox_00_01.getText()))
markbox_00_00.setText("1");
else
markbox_00_00.setText("0");
}

....

private void markbox_02_02ActionPerformed(java.awt.event.ActionEvent evt) {
if("0".equals(markbox_00_00.getText()))
markbox_02_02.setText("1");
else
markbox_02_02.setText("0");
}

简而言之:如何使 String 成为 JButton 的特定变量名称,以便调用/访问/编辑其属性?

示例:

按钮名称 = markbox_01_02;

buttonName.setText("2");

is equavalent to markbox_01_02.getText("2");

非常感谢您的帮助,谢谢...

附注我习惯在 NetBeans Design 中制作 JFrame(只需单击并拖动调色板窗口中的对象,如 JPanel、JButton 等,因此除了制作自己的逻辑方法外,我不会手动键入代码)。

最佳答案

您可能需要重做您的程序并重新表述您的问题,因为不太清楚您被困在哪里,这就是我将此答案写为社区 Wiki 的原因。

以下程序创建 GridLayout并在其下方添加 2 个 JButton,其中包含“保存”和“撤消”按钮。

每当您按下按钮时,它都会根据按钮之前的状态将其文本更改为 01,并且“撤消”按钮将撤消上次单击的内容同样,如果它是 0,它将变成 1,反之亦然。

我想你应该阅读How to write an ActionListener在复制粘贴此示例之前,请先了解其含义并尝试了解此程序的工作原理。

“保存”按钮的逻辑取决于您,因为我不确定您想在那里做什么,而且我不会为您编写所有代码。这样做只是为了让您了解如何处理事件。

此外,出于与“保存”按钮相同的原因,结束游戏的逻辑留给您。

我希望知道如何在 Ubuntu 中录制屏幕并保存为 GIF,但这里有一个关于该程序的屏幕截图:

enter image description here

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TicTacToe implements ActionListener {
JFrame frame;
JButton buttons[];
JPanel pane, buttonPane;
boolean pressed[];
JButton save, undo;
int n = -1;

public void actionPerformed(ActionEvent e) {
for (int i = 0; i < buttons.length; i++) {
if(e.getSource() == buttons[i]) {
pressed[i] = !pressed[i];
buttons[i].setText(pressed[i] ? "1" : "0");
n = i;
break;
}
}
}

public TicTacToe () {
frame = new JFrame("Tic Tac Toe Game");
buttons = new JButton[9];
pane = new JPanel(new GridLayout(3, 3));
pressed = new boolean[9];
buttonPane = new JPanel(new FlowLayout());
save = new JButton("Save");
undo = new JButton("Undo");

for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton("0");
pressed[i] = false;
}

for (JButton b : buttons) {
b.addActionListener(this);
pane.add(b);
}

undo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (n == -1) {
return;
}
pressed[n] = !pressed[n];
buttons[n].setText(pressed[n] ? "1" : "0");
}
});

buttonPane.add(save);
buttonPane.add(undo);

frame.add(pane, BorderLayout.PAGE_START);
frame.add(buttonPane, BorderLayout.CENTER);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main (String args[]) {
new TicTacToe();
}
}

关于java - 将递增/变化的字符串值转换为 JButtons 的现有增量变量名称,以修改其在 java 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34617167/

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