我在Java中清除TextArea
的问题。
Button gen = new Button("generate");
gen.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
textArea.clear();
combination.init();
setPassword();
textArea.setText(password);
}
});
单击Button
时,事件处理程序将字符串"密码"放入TextArea
中。它通过这样做获得字符串:
combination.init();
setPassword();
然后将字符串放入TextArea
:
textArea.setText(password);
如果再次单击Button
,将生成一个新字符串并将其放入TextArea
中。但是,新字符串没有事先清除,而是在最后一个之后被放置。
我尝试这样解决它,但似乎是错误的,也不起作用:
int i = textArea.getParagraphs().size();
if(i != 0) {
textArea.clear();
}
那我做错了什么?为什么不清除TextArea
?
正如@dvarga所说,使用setText()
时不需要clear()
方法,因为最后一个在添加新值之前清除了先前的文本。
如果再次单击该按钮,将生成一个新字符串并放置 进入textarea。
问题来自setPassword()
,我想当您生成一个新值时,您没有将其放入密码中,并且您认为clear()
中的问题,因为如果您的方法setPassword(),则在TextArea中添加了密码,而不是结果。
此示例更多地说明您的问题:
gen.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
// combination.init();
String generated = setPassword();
area.setText(generated);
}
});
这就是方法生成一个字符串:
private String setPassword() {
byte[] array = new byte[7]; // length is bounded by 7
new Random().nextBytes(array);
String generatedString = new String(array, Charset.forName("UTF-8"));
return generatedString;
}
或通过更改setPassowrd()
中密码的值:
gen.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
// combination.init();
setPassword();
area.setText(password);
}
});
}
private void setPassword() {
byte[] array = new byte[7]; // length is bounded by 7
new Random().nextBytes(array);
String generatedString = new String(array, Charset.forName("UTF-8"));
password = generatedString;
}
作为 textArea.setText(password);
也将"清除"文本,问题不是clear
方法(但是它没有用)。
问题必须来自(一种)这些方法
combination.init();
setPassword();
您最有可能将新文本附加到上一个文本而不是覆盖它的地方(password
成员变量已经包含错误的文本)。
如果您发布了上述方法,则可以在此处找到根问题,或者基于此问题,您可以自己找到错误。