无法将一个 class 中的 char 数组发送到另一个 Java 中的可观察列表

Trouble sending a char array in one class to an observable list in another in Java

我是 Java 的新手,我正在尝试将一个 class 中生成的字符串/数组发送到另一个 class 以用于可观察列表。基本上我希望一个 class 中的字符串作为字符数组发送到另一个 class 到一个可观察列表,这样字母就可以在 GUI 中以类似图块的格式呈现。

这是我的第一个class:

public class Phrase {

    String gamePhrase = "Keep moving forwards";
    String guessPhrase = gamePhrase.replaceAll("[a-zA-Z0-9]", "*"); 

    char[] array = guessPhrase.toCharArray();

}

这是我的第二个 class,我正在尝试将字符添加到:

private ObservableList<Node> phraseList;

private Phrase p1 = new Phrase();

private void start() {

    phraseList.clear();
    for (p1.toCharArray()) {
        phraseList.add(new LetterBoxes(c));
    }
}


private static class LetterBoxes extends StackPane {
    private Rectangle bg = new Rectangle(40, 60);
    private Text text;

    public LetterBoxes(char x) {
        bg.setFill(x == ' ' ? Color.DARKSEAGREEN : Color.WHITE);
        bg.setStroke(Color.BLUE);

        text = new Text(String.valueOf(x).toUpperCase());
        text.setFont(DEFAULT_FONT);
        text.setVisible(false);

        setAlignment(Pos.CENTER);
        getChildren().addAll(bg, text);
    }
}

我不确定如何正确地获取数组并且很难继续。任何帮助都会很棒!

我觉得你是法国人不是吗? Ce tombe bien, moi aussi ! 但是我猜确实有些不对劲:

for(p1.toCharArray())

我不知道你想做什么,但我认为它行不通。

所以首先,你必须在 class "phrase" 中私下传递你的变量,并构建一些 getters-setters:

public class Phrase {
private String gamePhrase = "Keep moving forwards";
private String guessPhrase = gamePhrase.replaceAll("[a-zA-Z0-9]", "*"); 
private char[] array = guessPhrase.toCharArray();

public void setGamePhrase(String s){
    gamePhrase = s;
}
public void setGuessPhrase(String s){
    guessPhrase = s;
}
public void setArray(Char[] s){
    array = s;
}
public String getGamePhrase(){
    return gamePhrase;
}
public String getGuessPhrase(){
    return guessPhrase;
}
public char[] getArray(){
    return array;
}
}

有了它,您将能够正确设置和获取数据。然后,在你的另一个class上,你可以

private Phrase p1 = new Phrase();
private void start() {

    phraseList.clear();
    for (int i=0; i<p1.getArray().size(); i++) { //Perhaps it's something else than .size(), but the idea is that you take the size of array
        phraseList.add(new LetterBoxes(p1.getArray().get(i))); // Here is the same thing, perhaps it's not get(i), but the idea is that you take the value which is associate to the rank i in array.
     }
}
public LetterBoxes(char x) {...}//don't change this function

希望对您有所帮助,

不要犹豫回答我

for (p1.toCharArray()) {

错误的原因有两个:

  1. Phrase class 没有提供 toCharArray 方法。
  2. for 循环的语法错误。

您可能需要 getter 用于 Phase class 中的数组并使用增强的 for 循环:

public class Phrase {

    public char[] getArray() {
        return array;
    }

    ...

}
for (char c : p1.getArray()) {