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

将递增/更改字符串值转换为JButtons的现有递增变量名,以修改其在java中的属性,java,swing,jbutton,string-conversion,Java,Swing,Jbutton,String Conversion,简化: 我想做一个非普通的井字游戏 无论如何,我将在这里发布的并不是这个概念的全部。我只想简单一点:我有9个方形按钮,命名为(3乘3)(将来可能允许用户通过设置制作4x4、5x5、10x10等): 其中前两位代表行,后两位代表列;以及保存按钮(btnSave)和撤消按钮(btnUndoActions) 每个标记框都有默认的弹簧值“0”,当我单击它时,它变为“1”;当我点击“1”时,它会变成“0”。当您按下“撤消”按钮时,它将重置为上次保存 以下是我的一些简化代码行: private byte m

简化:

我想做一个非普通的井字游戏

无论如何,我将在这里发布的并不是这个概念的全部。我只想简单一点:我有9个方形按钮,命名为(3乘3)(将来可能允许用户通过设置制作4x4、5x5、10x10等):

其中前两位代表行,后两位代表列;以及保存按钮(btnSave)和撤消按钮(btnUndoActions)

每个标记框都有默认的弹簧值“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...
           */
简言之:如何使String成为JButton的特定变量名,以便调用/访问/编辑其属性

示例

buttonName=markbox\u 01\u 02

按钮名称.setText(“2”)

等于markbox_01_02.getText(“2”)

我真的很感谢你的帮助,谢谢你


另外,我在NetBeans设计中使用JFrame(只需单击并拖动调色板窗口中的对象,如JPanel、JButton等,因此除了生成自己的逻辑方法外,我不会手动键入代码).

你可能需要重做你的程序,并重新表述你的问题,因为不清楚你被困在哪里,这就是我作为社区维基撰写此答案的原因

下面的程序为电路板创建一个按钮,并在其下方添加两个包含“保存”和“撤消”按钮的按钮

无论何时按下按钮,它都会根据按钮的先前状态将其文本更改为
0
1
,而“撤消”按钮将以相同的方式撤消上一次clic,如果是
0
,它将变为
1
,反之亦然

我想你应该在复制粘贴这个例子之前阅读,理解它的意思,并尝试理解这个程序是如何工作的

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

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

我希望我知道如何在Ubuntu中录制屏幕并将其另存为GIF,但以下是该程序的屏幕截图:

import java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;
公共类TicTacToe实现ActionListener{
JFrame框架;
JButton按钮[];
JPanel窗格,buttonPane;
布尔按下[];
JButton保存、撤消;
int n=-1;
已执行的公共无效操作(操作事件e){
对于(int i=0;i
你可能需要重做你的程序,并重新表述你的问题,因为不清楚你被困在哪里,这就是我作为社区维基撰写此答案的原因

下面的程序为电路板创建一个按钮,并在其下方添加两个包含“保存”和“撤消”按钮的按钮

无论何时按下按钮,它都会根据按钮的先前状态将其文本更改为
0
1
,而“撤消”按钮将以相同的方式撤消上一次clic,如果是
0
,它将变为
1
,反之亦然

我想你应该在复制粘贴这个例子之前阅读,理解它的意思,并尝试理解这个程序是如何工作的

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

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

我希望我知道如何在Ubuntu中录制屏幕并将其另存为GIF,但以下是该程序的屏幕截图:

import java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;
公共类TicTacToe实现ActionListener{
JFrame框架;
JButton按钮[];
JPanel窗格,buttonPane;
布尔按下[];
JButton保存、撤消;
int n=-1;
已执行的公共无效操作(操作事件e){
对于(int i=0;iprivate 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");
}
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();
    }
}