2017-12-16 34 views
-1

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はなぜクリアされませんか?

+0

問題は 'textArea.clear();'メソッドではなく、とにかく役に立たない。 'combination.init();'または 'setPassword();'メソッドが問題を引き起こしている可能性があります。これらのメソッドを投稿できますか? – pulkit

+0

問題は投稿していないコードが原因です。 [MCVE]を作成します。 –

+0

あなたのメソッド 'setPassword()'と 'combination.init()'のコードを投稿してください。 –

答えて

0

setText()を使用すると、@DVargaは、メソッドを使用する必要はありません。新しい値を追加する前に前のテキストをクリアするためです。

ボタンをもう一度クリックすると、新しい文字列が生成され、 がTextAreaに挿入されます。

setPassword()から来る問題、あなたはパスワードでそれを入れていなかった新しい値を生成するとき、私は推測し、あなたの方法のsetPassword場合は、TextAreaのではない結果をパスワードを追加しましたので、あなたは、clear()から問題を考えました()。

この例では、より多くのあなたの問題について説明します。

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; 

    } 
0

textArea.setText(password);もテキストをクリアしますが、問題はclearメソッドでは発生しません(ただし、無意味です)。

問題は(の1つ)から、これらの方法であなたはおそらく前のテキストに新しいテキストを追加するのではなく(passwordメンバ変数がすでに間違ったテキストが含まれている)、それを上書き

combination.init(); 
setPassword(); 

を来なければなりません。

上記の方法を投稿すると、根本的な問題がここで見つかるか、またはこれに基づいて自分でバグを見つけることができます。

+0

'combination.init();'はランダムな文字列を生成するプロセスを開始します(私はすべてのコードを邪魔したくありません)。そして、 'set.password();'は、既存のStringを新しく生成された文字列で上書きします。私はこれが働いていることを確認した。それは、イベントハンドラメソッド内で何らかの形でストリングを互いに追加するようです。 – yarvis

+1

'textArea.setText(password);はハンドラの最後の文であるため、ハンドラが原因で問題が発生することはありません。したがって、1)変数 "password"には破損したテキストが含まれているか、2)別のハンドラがあります。 – DVarga

関連する問題