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