2012-04-24 4 views
1

진행률 JDialog를 Java로 구현하려고합니다. 파일을 파싱하고 새 파일을 구문 분석하기 시작한 후 JDialog를 새로 고치고 싶습니다. 제 문제는 JDialog가 상쾌하지 않다는 것입니다. 나는 그것을 다시 칠하려했거나 크기를 재조정하려 했으므로 다시 칠할 것입니다. 또한 레이블을 제거하고 새 레이블을 추가하려고했습니다.진행 표시 줄 만들기 - JDialog 새로 고침

해서 ProgressDialog 클래스 :

public class ProgressDialog extends javax.swing.JDialog { 
    private JLabel jLabel1; 

    public ProgressDialog(Window frame) { 
     super(frame); 
     this.setResizable(false); 
     this.setLocationRelativeTo(frame); 
     initGUI(); 
     //this.setVisible(true); 

    } 

    private void initGUI() { 
     try { 
      { 
       setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 
       getContentPane().setLayout(null); 
       { 
        jLabel1 = new JLabel(); 
        getContentPane().add(jLabel1); 
        jLabel1.setText("In Progress.."); 
        jLabel1.setBounds(12, 12, 215, 52); 
        jLabel1.setHorizontalAlignment(SwingConstants.CENTER); 
       } 
      } 
      this.setSize(255, 114); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void setText(String s){ 
     this.setVisible(true); 
     jLabel1.setText(s); 
     this.resize(this.getSize()); 
     this.repaint(); 
    } 
} 

나는 그것을 사용하는 방법 : 당신은 동부 서머 타임에 (이벤트 디스패치 스레드) 파일의 구문 분석을 수행하는 추측하고

ProgressDialog pd = new ProgressDialog(frame); 
for(File file:files){ 
    pd.setText("Parsing " + file + "."); 

    ... 

} 

답변

4

작업자 스레드에서 파일 구문 분석을 수행하고 이벤트 분산 스레드에서 진행 대화 상자를 업데이트해야합니다. 몇 가지 링크 가치가 읽기 :

+0

링크를 가져 주셔서 감사합니다. 구현했습니다. 정상적으로 작동합니다. –

3

. Repaint()를 호출하면 실제로 EDT의 현재 호출이 완료 될 때 전달되는 EventQueue의 Event가 실제로 푸시됩니다. EDT를 차단하고 있으므로 모든 작업을 수행했을 때만 다시 그리기가 수행되므로 진행률 표시 줄의 새로 고침/다시 그리기가 표시되지 않습니다.

SwingWorker를 사용하여 구문 분석 작업을 별도의 스레드에 넣고 EDT를 차단 해제 상태로 둡니다. SO 또는 웹에서 SwingWorker를 사용하는 방법에 대한 많은 예제가 있습니다.

+0

는 설명, 재 페인트가 작동하지 않는 이유를 주셔서 감사합니다 사용자에게 진행 상황을 보여주는 예제를 포함, 그것은 나를 도움 제비. SwingWorker로 구현했고 잘 작동합니다. –