2016-08-08 12 views
-1

JFrame 폼에서 텍스트 필드를 두 번 설정했지만 마지막으로 설정 한 텍스트 필드가 남아 있습니다. JFrame Form 외에도 더 많은 시간을 성공적으로 설정할 수 있습니다. 예 :JFrame 폼에서 여러 번 구성 요소를 설정하는 방법

class test extends JFrame { 
public static void main(String[] args) { 
    test t = new test(); 
    textfield.setText("Hello"); 
    long a = System.currentTimeMillis(); 
    long c = a; 
    while (c > a - 1000) { 
     a = System.currentTimeMillis(); 

    } 
    textfield.setText("Hello2"); 
} 
static private JTextField textfield; 
public test() { 
    super(); 
    setSize(300, 300); 
    textfield = new JTextField("Hello1"); 
    add(textfield); 
    setVisible(true); 
}} 

위의 코드는 성공적으로 실행 중입니다. 1 초 후에 "Hello"와 "Hello2"를 먼저 표시하십시오. 그러나 JFrame Form에는 "Hello"대신 "Hello2"만 표시됩니다.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

    jTextField1.setText("Hello"); 
    long a = System.currentTimeMillis(); 
    long c = a; 
    while (c > a - 1000) { 
     a = System.currentTimeMillis(); 

    } 
    jTextField1.setText("Hello2"); 


}           

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(deneme.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(deneme.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(deneme.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(deneme.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new deneme().setVisible(true); 
     } 
    }); 
} 

또한 I는 repaint(), validate() revalidate() 및 검색 방법. 하지만 내 프로젝트 JFrame 양식 때문에 JFrame 개체가 없습니다. 따라서 이러한 방법을 사용할 수 없습니다.

미리 답변 해 주셔서 감사합니다.

+1

"실행되지 않음"이란 무엇을 의미합니까? 현재의 행동과 기대하는 행동을 설명하십시오. –

+1

프로그램에서 수행하고자하는 작업을보다 정확하게 할 수 있습니까? – whyn0t

+0

@KrzysztofKosmatka 텍스트 필드에는 "Hello2"만 표시됩니다. 나는 "Hello"다음에 "Hello2"라는 표시가 1 초 후에 나타날 것을 기대한다. 감사합니다 –

답변

1

두 번째 경우에는 jButton1ActionPerformed() 메서드가 이벤트 처리 스레드 (EDT)에서 호출되고 사용자가이 스레드를 잠시 차단하기 때문입니다. EDT가 차단되면 UI가 업데이트되지 않습니다. 당신이 텍스트는 초 후에 변경하려는 경우, 당신은 EDT를 차단하지만, 일부 backgroung에이 thred 사용, 예컨대 :

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){ 

    jTextField1.setText("Hello"); 
    new javax.swing.SwingWorker< Void, Void >() { 

     @Override 
     protected Void doInBackground() throws Exception { 
      Thread.sleep(1000); 
     } 

     @Override 
     protected void done() { 
      jTextField1.setText("Hello2"); 
     } 
    }.execute(); 
} 

를 활성 대기 (while (c > a - 1000))를 사용하지 않는 안된다. 대신 Thread.sleep()을 사용하십시오.

+0

친절하게 감사드립니다. –

+0

깨끗하고 효과적인 감사 Krzysztof Kosmatka; @ K. Talha : 계속 =] – whyn0t