【发布时间】:2018-09-29 04:11:30
【问题描述】:
我正在尝试创建一个非常基本的 Java GUI 程序来解决 Boggle 板问题。
它使用递归 DFS。我想要发生的是按钮的背景颜色(我使用按钮只是因为它们已经是正方形)从黄色变为红色,因为字母被“标记”并在“未标记”时返回黄色。
如果我注释掉将其重新充电为黄色的最后一行,以及使用 Thread.sleep() 延迟程序的方法,它会按预期工作,将它们全部保留为红色,但如果我只取消注释延迟方法,它确实不实时更新,程序运行结束后所有背景都变为红色。
如果我取消注释将其变回黄色的行,它会一直保持黄色。
我不知道如何让按钮实时切换为红色和返回黄色。
if(r+1 != bBoard.length && c+1 != bBoard.length && !bBoard[r+1][c+1].equals(""))
{
String temp = bBoard[r][c];
bBoard[r][c] = "";
boardLabel[r][c].setBackground(Color.RED);
if(dictionary.contains(word) && word.length() > 2)
{
wordList.add(word);
delayProgram();
}
depthFirstSearch(bBoard, r+1, c+1, word);
bBoard[r][c] = temp;
boardLabel[r][c].setBackground(Color.YELLOW);
}
【问题讨论】:
-
“实时”表示更改按钮颜色的代码存在于事件侦听器(例如 ActionListener)中。我们不知道这是否基于此代码 sn-p。此外,永远不要让 GUI 线程进入睡眠状态。如果您在 Swing GUI 中需要延迟,请改用 Swing Timer。
-
@HovercraftFullOfEels 代码不在动作监听器中,按钮实际上从未用作按钮,我只是为了格式化而制作按钮。颜色在由不同按钮调用的循环内更改,其颜色永远不会改变
-
那么这段代码是在创建对象时调用的吗?根据我们对您的问题和代码的有限看法,很难说发生了什么,您需要考虑edit提出您的问题并向我们展示更相关的代码作为代码格式的文本,确切地说是minimal reproducible example (请阅读链接)。
-
所以如果我理解正确的话,你有一堆(表)黄色按钮。您循环浏览它们并将它们的颜色更改为红色一段时间,然后再变回黄色并移动到下一个按钮,对吗?
-
@MatheM 是的。它正在模拟一个boggle board,它进行dfs搜索,它将从左上角开始,将第一个字母添加到字符串中,然后通过将其添加到相同的字符串并检查树集来检查其右侧的字母字典单词。我希望字符串当前包含的字母为红色,然后在不再使用时变回黄色。但它们始终保持黄色。我将所有按钮都更改为标签,但仍然得到相同的行为。