Java 递归和/或getBackground()未按预期工作
我正在使用递归方法对用户输入的Boggle板上的JButton进行着色。例如,如果单词“CAT”用作单词参数,则该方法将搜索按钮[][]数组,以查找旁边有“a”和“T”的“C”,并将相应的按钮涂成橙色并返回true。然而,我的代码有一个问题,像catatat这样的词也会返回true,因为我的代码无意中允许重用按钮 问题是我在检查JButton是否已经被使用(已经被涂成橙色)时遇到了问题。当我在递归方法中使用getBackground()时,我发现jbutton仍然是默认的白色,即使它们在视觉上是橙色的。有没有想过如何检测到JButton已经被使用过(已经被涂成橙色) 假设JButton数组中填充了新按钮,每个按钮上都有一个随机字母Java 递归和/或getBackground()未按预期工作,java,swing,recursion,multidimensional-array,colors,Java,Swing,Recursion,Multidimensional Array,Colors,我正在使用递归方法对用户输入的Boggle板上的JButton进行着色。例如,如果单词“CAT”用作单词参数,则该方法将搜索按钮[][]数组,以查找旁边有“a”和“T”的“C”,并将相应的按钮涂成橙色并返回true。然而,我的代码有一个问题,像catatat这样的词也会返回true,因为我的代码无意中允许重用按钮 问题是我在检查JButton是否已经被使用(已经被涂成橙色)时遇到了问题。当我在递归方法中使用getBackground()时,我发现jbutton仍然是默认的白色,即使它们在视觉上是
public boolean findWord(String word) {
clearButtons();
for (int row = 0; row < length; row++) {
for (int col = 0; col < length; col++) {
if (findWord(word, row, col)) {
System.out.println("");
return true;
}
}
}
return false;
}
private boolean findWord(String word, int row, int col) {
if(word.equals("")) {
return true;
}
if (row < 0 || row >= length ||
col < 0 || col >= length ||
!(buttons[row][col].getText().equals(word.substring(0,1))) ||
buttons[row][col].getBackground().equals(orange) // <- always is false
) {
return false;
}
String rest = word.substring(1, word.length());
boolean letter =
findWord(rest, row-1, col-1) ||
findWord(rest, row-1, col) ||
findWord(rest, row-1, col+1) ||
findWord(rest, row, col-1) ||
findWord(rest, row, col+1) ||
findWord(rest, row+1, col-1) ||
findWord(rest, row+1, col) ||
findWord(rest, row+1, col+1);
if(letter) {
buttons[row][col].setBackground(orange); // <- despite this
}
return letter;
}
public boolean findWord(字符串字){
clearButtons();
for(int row=0;row=长度| |
col<0 | | col>=长度
!(按钮[行][col].getText().equals(字.子字符串(0,1)))||
按钮[行][col].getBackground().equals(橙色)/如中所述
获取此组件的背景色
返回:此组件的背景色;如果此组件没有
如果具有背景色,则其父对象的背景色为
返回
此方法返回Color
的实例,因此您需要比较Color.orange
或Color.orange
感谢大家的帮助,我可以通过添加按钮数组作为参数来找到答案
public boolean findWord(String word, int row, int col, JButton[][] buttons)
最后一种方法如下所示
public boolean findWord(String word) {
clearButtons(); //make buttons white again
for (int row = 0; row < length; row++) {
for (int col = 0; col < length; col++) {
if (findWord(word, row, col, buttons)) {
return true;
}
}
}
return false;
}
private boolean findWord(String word, int row, int col, JButton[][] buttons) {
if(word.equals("")) {
return true;
}
if (row < 0 || row >= length ||
col < 0 || col >= length ||
!(this.buttons[row][col].getText().equals(word.substring(0,1))) ||
buttons[row][col].getBackground().equals(orange)
) {
return false;
}
String rest = word.substring(1, word.length());
boolean letter =
findWord(rest, row-1, col-1, buttons) ||
findWord(rest, row-1, col, buttons) ||
findWord(rest, row-1, col+1, buttons) ||
findWord(rest, row, col-1, buttons) ||
findWord(rest, row, col+1, buttons) ||
findWord(rest, row+1, col-1, buttons) ||
findWord(rest, row+1, col, buttons) ||
findWord(rest, row+1, col+1, buttons);
if(!letter) {
this.buttons[row][col].setBackground(white);
}
return letter;
}
public boolean findWord(字符串字){
clearButtons();//再次将按钮变为白色
for(int row=0;row=长度| |
col<0 | | col>=长度
!(this.buttons[row][col].getText().equals(word.substring(0,1)))||
按钮[行][col].getBackground().equals(橙色)
) {
返回false;
}
字符串rest=word.substring(1,word.length());
布尔字母=
findWord(其余,第1行,第1列,按钮)||
findWord(其余、第1行、列、按钮)||
findWord(其余,第1行,列+1,按钮)||
findWord(其余、行、列1、按钮)||
findWord(其余、行、列+1、按钮)||
findWord(其余,行+1,列-1,按钮)||
findWord(其余、行+1、列、按钮)||
findWord(其余、行+1、列+1、按钮);
如果(!字母){
此.按钮[行][列].setBackground(白色);
}
回信;
}
}您调试到什么位置了?按钮[row][col].getBackground()返回什么?如果不清楚,很抱歉!1.橙色是前面声明的颜色2.按钮[row][col].getBackground()返回java.awt.color[r=255,g=255,b=255](默认白色)考虑提供一个演示你的问题的代码。这不是一个代码转储,而是你正在做的一个例子,它突出了你所面临的问题。这将导致更少的混乱和更好的响应。谢谢,抱歉!<代码> CurrutsP< <代码>?>代码>颜色橙色=新颜色(245, 130, 32)比较时,
应等于橙色
。OP不需要使用一个常量值新颜色(245,130,32)。等于(新颜色(245,130,32))
等于真
:P
public Color getBackground()
public boolean findWord(String word, int row, int col, JButton[][] buttons)
public boolean findWord(String word) {
clearButtons(); //make buttons white again
for (int row = 0; row < length; row++) {
for (int col = 0; col < length; col++) {
if (findWord(word, row, col, buttons)) {
return true;
}
}
}
return false;
}
private boolean findWord(String word, int row, int col, JButton[][] buttons) {
if(word.equals("")) {
return true;
}
if (row < 0 || row >= length ||
col < 0 || col >= length ||
!(this.buttons[row][col].getText().equals(word.substring(0,1))) ||
buttons[row][col].getBackground().equals(orange)
) {
return false;
}
String rest = word.substring(1, word.length());
boolean letter =
findWord(rest, row-1, col-1, buttons) ||
findWord(rest, row-1, col, buttons) ||
findWord(rest, row-1, col+1, buttons) ||
findWord(rest, row, col-1, buttons) ||
findWord(rest, row, col+1, buttons) ||
findWord(rest, row+1, col-1, buttons) ||
findWord(rest, row+1, col, buttons) ||
findWord(rest, row+1, col+1, buttons);
if(!letter) {
this.buttons[row][col].setBackground(white);
}
return letter;
}