gpt4 book ai didi

java - 如何撤消 JButton 执行的操作

转载 作者:行者123 更新时间:2023-11-30 06:12:49 26 4
gpt4 key购买 nike

我目前正在研究一个类似拼字游戏的基本实现,该游戏是在 Swing 上从随机字母组成单词,我需要一个方面的帮助。为了简要解释该 View ,我在中央面板创建了一个 6X6 的 JButton 网格(我已将其实现为图 block ),在顶部面板有两个 Jbutton(提交和完成)。下面给出了我的 ActionPerformed 方法代码。请注意,我有一个名为 Tile 的单独类,它提供 JButton 的图形表示,并具有与 JButton 相同的方法。

public void actionPerformed(ActionEvent e)
{
String choice = e.getActionCommand();

if(!choice.equals("Done") && !choice.equals("Submit"))
{
for(int j=0; j<6; j++)
{
for(int k=0; k<6; k++)
{

if(tile[j][k]==e.getSource())
{
current+=(tile[j][k].getTile().letter()); //gets each letter of the clicked Tiles and adds it to a String variable 'current'
score+=(tile[j][k].getTile().value()); //gets the value of the tiles to calculate the score

tile[j][k].setForeground(Color.blue);
tile[j][k].removeActionListener(this);
tile[j][k].setEnabled(false); //the tile can only be clicked once

//rest of the code to set rules for adjacent tiles etc
}
}
}
}

如果用户选择了一个错误的单词并单击了提交按钮,我想撤消所有选定的图 block ,这应该会恢复正常。或者,我可以添加一个用户可以手动选择的撤消按钮。起初我想实现一种方法来打乱瓷砖,但这对我来说很难,所以我决定撤消点击的按钮。

有人可以帮我解决这个问题吗?我会感激的。

最佳答案

使用 Stack 跟踪已选择的图 block 。

Stack<Tile> history = new Stack<Tile>();

在您的 actionPerformed 方法中:

if(tile[j][k]==e.getSource())
{
...
history.push(tile[j][k]);
...
}

if(choice.equals("Undo"))
{
Tile previous = history.pop(); //be sure to handle EmptyStackException
//TODO undo the actions of the Tile: subtract score, remote letter, enable the button
}

另外,我建议你更改这行代码:

if(!choice.equals("Done") && !choice.equals("Submit"))

这是为每个不等于“完成”或“提交”的操作命令执行 if-then 代码块。现在您将拥有一个撤消命令,它将执行它,这不是您想要的。

编辑:

根据要求提供更完整的代码示例:

Stack<Tile> history = new Stack<Tile>();

public void actionPerformed(ActionEvent e)
{
String choice = e.getActionCommand();

if(choice.equals("Click"))
{
for(int j=0; j<6; j++)
{
for(int k=0; k<6; k++)
{
if(tile[j][k]==e.getSource())
{
current+=(tile[j][k].getTile().letter()); //gets each letter of the clicked Tiles and adds it to a String variable 'current'
score+=(tile[j][k].getTile().value()); //gets the value of the tiles to calculate the score

tile[j][k].setForeground(Color.blue);
tile[j][k].removeActionListener(this);
tile[j][k].setEnabled(false); //the tile can only be clicked once

history.push(tile[j][k]);

// rest of the code to set rules for adjacent tiles etc
}
}
}
}
else if(choice.equals("Undo"))
{
Tile previous = history.pop(); //be sure to handle EmptyStackException
//TODO undo the actions of the Tile: subtract score, remote letter, enable the button
}
else if(choice.equals("Submit"))
{
//...
}
else if(choice.equals("Done"))
{
//...
}
}

关于java - 如何撤消 JButton 执行的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509175/

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