2013-03-30 4 views
1

문자열 배열이 있고 Jframes에서 문자열을 인쇄하고 싶습니다. for를 사용하여 Jpanel이있는 Jframe을 만드는 다른 클래스를 호출합니다. 그것은 다음과 같습니다 :java 창/제목별로 창/Jframe에 액세스하십시오.

for(int i=0;i!=v.length;i++){ 
    (...) 
    NewWindow wind = new NewWindow(); 
} 

문제는 내가 그 Jframes 중 하나를 닫고 싶을 때입니다. 제목/창 이름을 알고 있지만 바람이 마지막 Jframe에 대해서만 유효하기 때문에 포인터를 잃어 버렸습니다.

포인터를 잃어 버리지 않고 Jframe을 알 수없는 번호를 만들거나 Jframe의 포커스를 얻는 다른 방법을 모르겠습니다. 자바에서 가능합니까?

답변

3

왜 창문에 대한 참조를 유지하지 않는 것이 좋을까요? 다른 방법

NewWindow[] windows = new NewWindow[v.length]; 
for (int i = 0; i < v.length; i++) { 
    // (...) 
    windows[i] = new NewWindow(); 
} 

또는 :

ArrayList<NewWindow> windows = new ArrayList<NewWindow>(v.length); 
for (int i = 0; i < v.length; i++) { 
    // (...) 
    windows.add(new NewWindow()); 
} 

편집 : 당신은 문자열의 값으로 창에 액세스 할 수 있도록하려면 또는 skirsch의 대답에 따라,하는 Map<String, NewWindow>

2

여러 개의 JFrames를 표시하는 GUI 디자인에 대해 논쟁의 여지가 있지만 (이 문제와 관련하여 몇 가지 중요한 문제가 있음을 믿어 의심치 않습니다.)하지만 지금 당장은 제쳐 놓으십시오. 기본적인 문제는 사용하려고하는 것입니다. 한 묶음의 참조 변수. 해결책은 단일 JFrame에 대한 하나의 참조를 사용하지 않고 대신 ArrayList<JFrame> 또는 다른 컬렉션을 사용하여 여러 객체를 참조하는 것입니다. JFrame을 생성하고 표시 할 때 컬렉션에 넣은 다음 뷰에서 제거 할 때 컬렉션에서 해당 객체를 제거해야합니다.

2
를 사용

지도를 사용하여 참조를 유지할 수 있습니다. 예 :

Map<String,NewWindow> windows = new HashMap<String,NewWindow>(); 
for (int i=0; i != v.length; i++) { 
    NewWindow wind = new NewWindow(); 
    windows.put(v[i], wind); 
} 

그리고 나중에는

String titleName = ... 
NewWindow wind = windows.get(titleName); 
// close window 

하지만 심각 ... 당신이 얼마나 많은 창을 열 것 같은 뭔가 창에 대한 참조를 가져 정의?

+0

질문을 다시 읽는 것이 가장 좋은 답변 일 것입니다. 1+ –