gpt4 book ai didi

java - 从 ActionListener 发送变量,以便另一个 ActionListener 可以使用它

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

我发现已经有人提出了一些关于这个主题的问题,但我还没有找到答案。我正在编写一个代码,其中用户在 JTextField 中键入内容,然后单击按钮后,他的单词将被替换为与他的单词具有相同数量的字符数的星号,例如“table”将被替换经过 ”****”。我是这样做的:

ask.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String guess = "";
String given = textGive.getText();
for (int i=0; i<given.length(); i++){
String asterisk = "*";
guess += asterisk;
textGive.setText(guess);
}

}
});

我知道我做得不太好,但我不知道如何做得更好。有什么建议吗?

现在,我想以某种方式将两个字符串(原始单词和星号)保存在范围之外,以便我可以在另一个 ActionListener 中访问它并进一步修改它。在编写第一个 ActionListener 之前,我确实编写了 String Guess = ""String Give = "" 但它似乎没有做任何事情。因此,在我的第二个 ActionListener 中,我想向他发送用户输入单词时收到的字符串 given

guess.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String attempt = textGuess.getText();
char att = attempt.charAt(0);
for (int i=0; i<5; i++){

if (given.charAt(i)==att){
textGuess.setText("Ok!");
}
}


}
});

Eclipse 给我错误提示:

"Cannot refer to the non-final local variable given defined in an enclosing scope".

我知道我需要将 given 设置为 Final 才能进一步访问它,但是如果变量依赖于第一个 ActionListener 的文本输入,该怎么做?这个问题还有其他解决方案吗?我最近开始使用java,所以我不太了解这门语言。

最佳答案

您希望类可见的任何内容都应放置在实例字段中,而不是放置在局部变量中。例如,给定的变量应该是在类中声明的私有(private)非静态字段,而不是隐藏在监听器的 actionPerformed 方法中的变量。

例如,

public class Foo extends JPanel {
private JButton ask = new JButton("Ask");
private JTextField textGive = new JTextField(10);
private String given = ""; // visible throughout the class

public Foo() {
add(textGive);
add(ask);
ActionListener listener = e -> {
String guess = "";
// String given = textGive.getText(); //visible only within this method
given = textGive.getText();
guess = given.replaceAll("\\w", "*");
textGive.setText(guess);
};

ask.addActionListener(listener);
textGive.addActionListener(listener); // also give the same listener to the JTextField
}

关于java - 从 ActionListener 发送变量,以便另一个 ActionListener 可以使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40794981/

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