2015-01-12 3 views
1

나는 3 개의 클래스가 있습니다. 하나는 모든 노력을하지만 아무 것도 표시하지 않는 작업자 클래스입니다. 다른 두 개는 GUI 클래스 중 하나가 다른 하나를 호출합니다. 두 번째 GUI 클래스를 호출하는 클래스는 worker 클래스를 엽니 다. 이미 노동자 클래스가 열려으로, 두 번째 GUI 클래스는하지만 노동자 클래스에서 사용되는 사용자 정보를 가져 오는 데 사용됩니다오픈 클래스 사이의 의사 교환

protected void openAdd() { 

     AddPet add = new AddPet(ADD_PROMPT, FIELDS, DATE_PROMPT); 
     add.setVisible(true); 
    } 

:

첫 번째 GUI는이 방법으로 두 번째를 호출 첫 번째 GUI에서는 다시 열지 않고 첫 번째 GUI에서 일부 정보를 사용하려고합니다.

내가해야 할 일은 두 번째 GUI의 정보를 첫 번째 GUI로 전달하여 함께 작업하고 열린 작업자 클래스에 전달할 수 있도록하는 것입니다.

어떻게해야합니까?

EDIT : 제 생각에는 최선의 방법은 두 번째 GUI에서 첫 번째 GUI의 메소드를 호출하는 것이지만 이것이 가능한지는 알 수 없습니다.

+1

M-V-C가 이동하는 방법이다. 모든 모델에 하나의 모델을 사용하고 두 GUI 모두 모델의 상태를 기반으로 뷰를 표시하십시오. –

+1

"worker"클래스의 참조를 두 번째 GUI 클래스에 전달할 수 있습니다 ... 두 번째 GUI 클래스가 실제로 첫 번째 GUI 클래스에 대해 알아야 할 필요가 없다면 클래스의 노출을 줄이거 나 줄이십시오. 노출시키지 마십시오. 이 코드는 서로 연결되어 있지 않으므로 첫 번째 GUI 클래스를 잠재적으로 원하지 않는 수정으로 노출합니다. – MadProgrammer

+0

' "가장 좋은 옵션은 두 번째 GUI에서 첫 번째 GUI의 메소드를 호출하는 것이지만, 이것이 가능할 지 알지 못합니다. "-"GUI "는 순수하고 단순한 객체입니다. 적절한 참조가있는 경우 다른 객체의 public 메서드를 호출 할 수 있습니다. 다시 말하지만, 나는 여전히 최선의 선택이 M-V-C 구조를 사용하는 것이라고 믿지만 대부분의 경우와 마찬가지로 악마가 세부 사항에 존재합니다. 좀 더 구체적인 도움이 필요하다면 먼저 자세한 내용을 알려주고 해당 코드를 [최소 예제 프로그램 또는 MCVE] (http://stackoverflow.com/help/mcve)로 표시하십시오. –

답변

1

두 번째 생각에, 두 번째 창은 본질적으로 첫 번째 창에 대한 대화 상자로 사용되고 있으며 사용자 데이터 입력과 그 밖의 다른 창에 사용하고있는 것처럼 보입니다. 그렇다면 두 번째 창이 JFrame이 아닌 모달 JDialog인지 확인하십시오. 그렇다면 열려있는 첫 번째 창과의 사용자 상호 작용을 차단하고, 정보를 추출하는 작업은 사용자가 작업을 완료했을 때 정확히을 알고 있기 때문에 쉽습니다. 프로그램 흐름이 두 번째 창 visibile을 설정하는 코드 바로 뒤에있는 첫 번째 GUI.

// in this example, AddPet is a modal JDialog, not a JFrame 
protected void openAdd() { 
    // I'm passing *this* into the constructor, so it can be used ... 
    // ... in the JDialog super constructor 
    AddPet add = new AddPet(this, ADD_PROMPT, FIELDS, DATE_PROMPT); 
    add.setVisible(true); 

    // code starts here immediately after the AddPet modal dialog is no longer visible 
    // so you can extract information from the class easy: 

    String petName = add.getPetName(); // I know you don't use these exact methods 
    String petBreed = add.getPetBreed(); // but they're just a "for instance" type of code 
    // ... etc 

} 

....

+0

예. 당신이 제공 한 링크를 읽고 나면 JFrame보다는 JDialog를 사용해야한다는 것이 분명합니다. 이제 코드를 변환하는 방법을 살펴 보겠습니다. –

+2

@DracoTBastard : 솔직히 JFrame 또는 JDialog를 확장하는 코드는 거의 없습니다. 대부분의 내 GUI 또는 "보기"코드는 JPanels를 작성하거나 JPanels를 확장합니다. 그런 다음 JFrames 또는 JDialogs 또는 JTabbedPanes에 배치하거나 CardLayouts를 통해 필요할 때마다 스왑 할 수 있습니다. 나는 이것이 나의 GUI 코딩의 유연성을 크게 증가 시킨다고 믿는다. –