2010-08-18 3 views
1

이 내 메인 클래스 코드 :하나의 창에서 다른 창으로 값 (배열 또는 arraylist)을 전달하는 방법은 무엇입니까?

PaneFirst에서
public static void main(String[] args) { 

JFrame f= new JFrame ("My Frame"); 
f.setDefaultCloseOperation (JFrame .EXIT_ON_CLOSE); 

JTabbedPane tp = new JTabbedPane(); 
tp.addTab("Pane1", new PaneFirst()); 
tp.addTab("Pane2", new PaneSecond()); 

f.add(tp); 
f.pack(); 
f.setVisible(true); 
} 

, 나는 사용자가 입력 한 값 (텍스트 필드)의 목록을 가지고, (I 5.이 내가 배열로 값을 각각 저장 말할 수 또는 아마 arraylist). PaneFirst에서 PaneSecond로 5 가지 값을 어떻게 전달합니까?

답변

3

실제로 값을 창 개체 ("보기")에 저장하지 말고 값 ("모델")을 보유하는 별도의 클래스를 만들어야합니다.

그러면 모델에 대한 참조를 두 창에 모두 전달할 수 있으며 한 창에서 모델 클래스의 값이 변경되면 다른 쪽도 변경 사항이 표시됩니다. 다음의 간단한 예제는 아이디어를 코드에 표시하는 것입니다. 모델은 다르게 보일 것입니다 만, 구현, 작성 및 사용 방법에 대한 아이디어를 제공해야합니다.

public class Model { 
    private List<String> values = new ArrayList<String>(); 
    public void add(String s) { 
     values.add(s); 
    } 
    public void remove(String s) { 
     values.remove(s); 
    } 
    public void get(i) { 
     values.get(i); 
    } 
    // ... 

} 

public static void main(String[] args) { 

JFrame f= new JFrame ("My Frame"); 
f.setDefaultCloseOperation (JFrame .EXIT_ON_CLOSE); 

JTabbedPane tp = new JTabbedPane(); 
Model model = new Model(); 
tp.addTab("Pane1", new PaneFirst(model)); 
tp.addTab("Pane2", new PaneSecond(model)); 

f.add(tp); 
f.pack(); 
f.setVisible(true); 
} 
+0

이것은 좋은 추천입니다! – Jonas

+0

MVC 모델입니까? 나는이 바보 같은 질문을한다. "모델 클래스 파일과 메인 클래스 파일을 분리해야합니까?" – javaIsTheBest

+0

큰 프로젝트에서 코드를보다 관리하기 쉬운 경향이있는 모델 뷰 분리를 제공합니다. 일반적으로 더 나은 디자인이지만 작은 프로젝트의 경우 <1000 줄의 코드이므로 항상 신경 쓰지는 않습니다. –

0

당신은 첫 번째 창에 두 번째 창에 대한 참조를 제공 할 수있다 (미안 해요, 자바와 객체 지향 프로그래밍 언어에 새로운입니다). 예 :

PaneSecond pane2 = new PaneSecond(); 
JTabbedPane tp = new JTabbedPane(); 
tp.addTab("Pane1", new PaneFirst(pane2)); 
tp.addTab("Pane2", pane2); 

첫 번째 창은이를 저장하고 나중에 두 번째 창에서 메서드를 호출하는 데 사용할 수 있습니다.

+0

왜이 답변은 투표에 실패 했습니까? – javaIsTheBest

+2

나는 투표가 내려 졌다는 이유가 UI 개발에있어서 매우 나쁜 습관을 보여준다고 믿는다. 즉, 우리는 이것이 "빠르고 더러운 해킹"이라고 말할 수 있습니다. – jfpoilpret

관련 문제