2017-12-16 4 views
-1

Java에서 TextArea을 지우는 데 문제가 있습니다. Button을 클릭하면분명히 여기서 작동하지 않는 이유는 무엇입니까?

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에 문자열 "암호"를 넣습니다. 그것은이를 수행하여 문자열을 가져옵니다 :

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

@DVarga에 따르면 setText()을 사용할 때 clear() 메서드가 필요하지 않습니다. 마지막 값은 새 값을 추가하기 전에 이전 텍스트를 지 웁니다.

버튼을 다시 클릭하면 새로운 문자열이 생성되어 을 TextArea에 넣습니다. 당신이 암호를 넣지 않은 새로운 가치를 생성 할 때 문제가 setPassword()에서 온

는 것 같아요, 당신은 텍스트 영역이 아닌 결과 귀하의 방법 경우에 암호를 추가하기 때문에 당신은 clear()에서 문제를 생각 SETPASSWORD().

이 예는 더 문제 설명 :

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 방법과 관련이 없습니다 (그러나 쓸모가 없습니다).

문제는 (중 하나)에서 당신이 아마 이전의 텍스트에 새로운 텍스트를 추가하기보다는 그것을합니다 (password 멤버 변수가 이미 잘못된 텍스트를 포함) 덮어 이러한 방법

combination.init(); 
setPassword(); 

를 제공해야합니다.

위에서 언급 한 방법을 게시하면 루트 문제가 여기에서 발견되거나이를 기반으로 직접 버그를 찾을 수 있습니다.

+0

'combination.init();'는 임의의 String 생성 프로세스를 시작하기 만합니다. (모든 코드를 사용하여 귀찮게하지 않으려 고합니다). 그리고'set.password();'는 새로 생성 된 문자열로 기존 문자열을 덮어 씁니다. 나는 이것이 작동하는지 점검했다. 그것은 어떻게 든 문자열을 이벤트 처리기 메서드 내에서 서로에 추가하는 것처럼 보입니다. – yarvis

+1

'textArea.setText (password);는 핸들러의 마지막 문이므로 처리기로 인해 문제가 발생하는 것은 불가능합니다. 100 % 확신 할 수 있습니다. 그래서 1) 변수 "password"에 손상된 텍스트가 포함되어 있거나 2) 다른 핸들러가 있습니다. – DVarga

관련 문제