Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么clear不在这里工作?_Java_Javafx_Event Handling - Fatal编程技术网

Java 为什么clear不在这里工作?

Java 为什么clear不在这里工作?,java,javafx,event-handling,Java,Javafx,Event Handling,我在Java中清除TextArea时遇到问题 Button gen = new Button("generate"); gen.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { textArea.clear(); combination.init(); setPas

我在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);
        }
    });
然后它将字符串放入
文本区域

textArea.setText(password);
如果再次单击
按钮
,将生成一个新字符串并放入
文本区域
。但是,新字符串不是预先清除它,而是放在最后一个字符串之后

我试着这样解决它,但它似乎是错误的,也不起作用:

int i = textArea.getParagraphs().size();
if(i != 0) {
    textArea.clear();
}

那么我做错了什么?为什么不清除
TextArea

TextArea.setText(密码)
也将“清除”文本,问题不在于
清除方法(但是它是无用的)

问题一定来自这些方法中的一种

combination.init();
setPassword();
您最有可能将新文本追加到以前的文本中,而不是覆盖它(成员变量
password
已经包含错误的文本)


如果您发布上述方法,可以在此处找到根本问题,或者基于此,您可以自己找到错误。

正如@DVarga所说,在使用
setText()
方法时,您不需要
clear()
方法,因为最后一个方法可以在添加新值之前清除以前的文本

如果再次单击按钮,将生成并放置一个新字符串 进入文本区

问题来自
setPassword()
,我猜当您生成一个新值时,您没有将其放入password中,并且您认为问题来自
clear()
,因为如果您的方法是setPassword(),则您在TextArea中添加密码不是结果

此示例将进一步解释您的问题:

    gen.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent e) {

            // combination.init();
            String generated = setPassword();
            area.setText(generated);

        }

    });
或者通过如下方式更改
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;

    }
gen.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent e){
//composition.init();
setPassword();
area.setText(密码);
}
});
}
私有void setPassword(){
byte[]数组=新字节[7];//长度以7为界
新的Random().nextBytes(数组);
String generatedString=新字符串(数组,Charset.forName(“UTF-8”);
密码=生成的字符串;
}

问题不在于
textArea.clear()方法,无论如何它都是无用的。可以是
composition.init()
设置密码()方法导致问题。你能发布这些方法吗?问题是由你没有发布的代码引起的。创建一个。发布您的方法的代码
setPassword()
composition.init()
。似乎您在文本区域设置了
password
,而不是您的方法的结果。请确保
setPassword更改您的密码
password`Try System.out.println(password),以确保密码正在更改。
composition.init();
只是开始生成随机字符串的过程(我不想用所有的代码打扰您)。和
set.password()用新生成的字符串覆盖现有字符串。我检查了一下这是否有效。它似乎以某种方式将字符串附加到事件处理程序方法中的另一个字符串中
是处理程序中的最后一条语句,问题不可能是由处理程序引起的-您可以100%确定。因此1)变量“password”包含损坏的文本,或者2)您有另一个处理程序。
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;
    }
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;

    }