2012-12-12 2 views
0

다음과 같은 시나리오를 생각해보십시오.수집 데이터를 효율적으로

CaravanData에는 몇 개의 JTextField가 있습니다. 그 목적은 사용자가 질문을 한 후 사용자가 완료하면 메인으로 다시 전송하는 것입니다. (또는 CaravanData에서 다시 대문이 예에서) 이상적으로

나는 다음과 같은 작업을 수행 할 싶은 호출 부모 JFrame의에 아이 JFrame의 데이터를 전송하는 가장 효율적인 방법은 무엇입니까 :

내 질문

:

class Main 
{ 
    public Main 
    { 
     CustomVariable data = new CaravanData(); 
    } 
} 

그러나 생성자에는 반환 유형이 없습니다. 그러나 변수 "data"가 CaravanData 클래스가 해당 비즈니스를 마칠 때까지 값이 할당되지 않기 때문에 이것이 최선의 방법 일 것입니다.

대안으로 getter와 setter를 사용하는 방법이 있습니다. 그러나 데이터를 검색하기 전에 사용자가 양식을 완료 할 때까지 기다려야합니다. while 루프를 사용했습니다 :

class Main 
{ 
    public Main 
    { 
     CaravanData caravanData = new CaravanData(); 
     while (caravanData.isUserFinished == false) 
     {//...Do nothing} 

     // Once the user has finished - collect the data: 
     CustomVariable data = caravanData.getRelevantData(); 
    } 
} 


class CaravanData 
{ 
    ... 
    public boolean isUserFinished() 
    {return ifUserHasCompletedForm;} 

    public CustomerVariable getRelevantData() 
    { 
     ... 
     return data; 
    } 
} 

나는이 방법이 효과적이라고 생각하지 않습니다. 더 나은 기술이 있습니까? 나는 많은 질문이 있기 때문에 몇 개의 JFrames를 가지고있다. 나는 그물에 답을 찾기 위해 이것을 어떻게 말할 지 확신하지 못했습니다. 나는 쓰레드를 사용한다고 생각 했는가? 다른 프로세스가 완료 될 때까지 하나의 프로세스를 중지합니다. 하지만 나는 EDT에서 많은 시간을 소비 할 때 쓰레드만을 사용한다는 인상 아래에 있었습니까?

답변

1

자녀 창으로 JDialog를 사용해보십시오. 다이얼로그가 처리 될 때까지 setVisible(true) 다이얼로그가 처리 될 때까지

getRelevantData() 메소드로 모든 데이터를로드 할 수 있습니다.

class Main 
{ 
    public Main 
    { 
     CaravanData caravanData = new CaravanData(); 
     // Show the dialog - setVisible(true) blocks till ok is pressed 
     caravanData.setVisible(true); 

     // Once the user has finished - collect the data: 
     CustomVariable data = caravanData.getRelevantData(); 
    } 
} 

class CaravanData extends JDialog 
{ 
    ... 
    // Called by an ActionListener for the OK Button 
    private void okButtonPressed(){ 
     setVisible(false); 
    } 

    public CustomerVariable getRelevantData() 
    { 
     ... 
     return data; 
    } 
} 
관련 문제