gpt4 book ai didi

java - JLabel更新问题

转载 作者:行者123 更新时间:2023-12-01 13:22:13 25 4
gpt4 key购买 nike

我正在创建一个刽子手游戏,但在单击右侧字母按钮后,无法更新包含单词每个字符的 jlabel。我一直在这方面遇到麻烦,因为我对使用 Java Guis 还比较陌生。下面是字母按钮的操作监听器。

private class LetterHandler implements ActionListener{

private char letterVal;

public LetterHandler(char lv){
letterVal = lv;
}

//checks if clicked button has the correct value as word char
public void actionPerformed(ActionEvent e){
for(int x = 1; x <= selectedWord.wordLength; x++){
if(selectedWord.wordValue.charAt(x - 1) == letterVal){
// JLabel letterValLabel = new JLabel(String.valueOf(letterVal));
wordSpacesArray.get(x-1).setName(String.valueOf(letterVal));
wordSpacesArray.get(x-1).revalidate();
continue;
}
else{
continue;
}
}
checkWin();
triesLeft--;
triesLeftLabel.revalidate();
}

//finds if all jlabels are complete or not
public void checkWin(){
for(int x = 1; x <= wordSpacesArray.size(); x++){
String charVal;
charVal = String.valueOf(wordSpacesArray.get(x-1));
if(charVal != "?"){
System.out.println("youWon");
System.exit(0);
}
else{
break;
}
charVal = null;
}
}
}

感谢任何帮助。如果您需要程序代码,请告诉我谢谢:)

最佳答案

代码存在一些问题。不过,我首先会尝试关注您当前的问题:

我假设 wordSpacesArray 是一个包含单词各个字母的 JLabel 的列表。

当此 ActionListener 收到通知时,您尝试使用与此按钮对应的字母来更新 wordSpacesArray 中的标签。但是,为了更新 JLabel 上显示的文本,您必须调用 JLabel#setText(String) JLabel#setName(String) 。所以该行应该是

wordSpacesArray.get(x-1).setText(String.valueOf(letterVal));
// ^ Use setText here!

现在,关于其他问题:

  • 正如评论中所指出的,您应该使用基于 0 的索引
  • 无需调用revalidate
  • 在当前 for 中使用 continue 是不必要的
  • 您应该使用==比较字符串,而应该使用equals

    // if(charVal != "?") { ... } // Don't do this!
    if(!charVal.equals("?")){ ... } // Use this instead
  • 但是在这种情况下,charVal 无论如何都是错误的:它将是标签的字符串表示,而不是其内容。因此,您应该从标签中获取文本,如下所示:

    // String charVal = String.valueOf(wordSpacesArray.get(x-1)); // NO!
    String charVal = wordSpacesArray.get(x-1).getText(); // Yes!
  • 只要您不调用 setTexttriesLeftLabel 就不会更新

  • 我认为 checkWin 方法的逻辑有缺陷。当您发现第一个字母不是问号时,您会打印“You won”(您赢了)。我认为当没有字母是问号时,它应该打印“You won”。
  • 您不应调用System.exit(0)。这是一个不好的做法。让您的应用程序正常结束。 (在这种情况下,也许只需处理主框架,尽管这对于游戏来说也是有问题的......)

总而言之,该类可能如下所示:

private class LetterHandler implements ActionListener
{
private char letterVal;

public LetterHandler(char lv)
{
letterVal = lv;
}

// checks if clicked button has the correct value as word char
@Override
public void actionPerformed(ActionEvent e)
{
for (int x = 0; x < selectedWord.wordLength; x++)
{
if (selectedWord.wordValue.charAt(x) == letterVal)
{
wordSpacesArray.get(x).setText(String.valueOf(letterVal));
}
}
checkWin();
triesLeft--;
triesLeftLabel.setText(String.valueOf(triesLeft));
}

// finds if all jlabels are complete or not
public void checkWin()
{
for (int x = 0; x < wordSpacesArray.size(); x++)
{
String charVal = wordSpacesArray.get(x).getText();
if (charVal.equals("?"))
{
// There is still an incomplete label
return;
}
}

// When it reaches this line, no incomplete label was found
System.out.println("You won");
}
}

关于java - JLabel更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960720/

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