我看到有关此主题的一些问题已经提出,但我还没有找到答案。我正在编写一个代码,其中用户在中键入一些内容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);
}
}
});
我知道我做的不好,但是我不知道如何做得更好。有什么建议吗?
现在,我想以某种方式将Strings,原始单词和星号保存在范围之外,这样我就可以在另一个ActionListener中访问它并进一步对其进行修改。在写第一本书之前,ActionListener
我确实写过东西String guess = ""
,String given = ""
但是似乎什么也没做。因此,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给我错误提示:
“无法引用在封闭范围内定义的给定的非最终局部变量”。
我知道我需要做given
final才能进一步访问它,但是如果变量依赖于first输入的文本,该怎么做ActionListener
呢?还有其他解决方案吗?我最近开始使用Java,所以我不太了解该语言。
您希望对类可见的所有内容都应放置在实例字段中,而不是局部变量中。例如,给定的变量应该是在类中声明的私有非静态字段,而不是埋在侦听器的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
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句