2011-08-19 1 views
1

모델을 전달하여 간단한 JList를 생성하는 스윙 응용 프로그램에 문제가 있습니다. 모델이 명백하게 채워지더라도 JList는 자신의 모델 내용을 표시하지 않습니다.Bizarro Swing JList 모델 동작

DefaultListModel dlm = new DefaultListModel(); 
String[] modelElems = {"Apple", "Orange", "Banana"}; 
for(int i = 0; i < modelElems.length; i++) 
    dlm.add(i, modelElems[i]); 

JList lstFruitList = new JList(dlm); 
lstFruitList.setVisible(true); 

내 스윙 앱이 실행되면 화면에 JList가 표시되지만 완전히 비어 있습니다. 무수한 예를 살펴 보았고, 스윙 튜토리얼을 쏟아 부 었으며, 무슨 일이 일어나고 있는지 알 수 없었습니다. 아무에게도 이런 일이 일어난 적이 있습니까? 눈부신 것 - 명백하게 틀린 무엇인가?!?

참고 : 나는 통해 루프를 시도하고있는 과일의 이름을 인쇄하는 경우, 그러나

// Prints "Fruit List model has a size of 3" 
System.out.println("Fruit List model has a size of " + dlm.size()); 

:

다음 인쇄 문이 참으로 나의 모델이 3 개 요소를 가지고 있음을 보여줍니다 내 모델은 i이 반복 변수 인 모든 반복에서 (String)dlm.get(i)을 호출하여 각 모델 요소를 null ...

으로 인쇄합니다.

hmmmm

답변

0

그 코드는 저에게 잘 작동합니다. 일부의 생각 :

  • 난 당신이 JList의에 setVisible를 호출 볼, 당신은 당신이 표시되는 무엇에 추가하는 방법을 정확히?
  • 뒤에을 추가하면 JFrame이 표시됩니까? 내가 올바르게 기억한다면 그건 잘 작동하지 않을 것입니다. 나는 모든 것을 다시 칠해야한다고 생각합니다.
  • 목록 모델을 어느 시점에서 잘못 다루지 않았는지 확인하십시오. 어쩌면 코드의 어느 시점에서 그것을 바꿀 것입니까?
  • 실제로 올바른 요소를보고 있는지 확인하십시오. 어쩌면 당신의 목록이 다른 것의 뒤에 숨겨져 있습니까? (배경색을 설정해보십시오. 즉, lstFruitList.setBackground(Color.BLUE);
  • 최종 생각, 제대로 컴파일 했습니까? 실수로 컴파일을 잊어 버렸거나 뭔가를 엉망으로 만들었습니다. . 코드의 이전 버전을 실행중인 뭔가가 작동하지 않는 이유에 대해 혼란스러워했다 참고로

, 여기에 내가 실행 한 코드입니다 : 유용한 응답 @의 rm5248에 대한

import java.awt.*; 
import javax.swing.*; 

public class javatest{ 

    public static void main(String[] args){ 
      JFrame f = new JFrame("HELLO"); 
      DefaultListModel dlm = new DefaultListModel(); 
      String[] modelElems = {"Apple", "Orange", "Banana"}; 
      for(int i = 0; i < modelElems.length; i++) 
       dlm.add(i, modelElems[i]); 

      JList lstFruitList = new JList(dlm); 
      lstFruitList.setVisible(true); 

      JPanel p = new JPanel(); 
      p.add(lstFruitList); 
      f.add(p); 
      f.setLocation(0,0); 
      f.setSize(400,400); 
      f.setVisible(true); 
    } 
} 
+0

덕분에 - (1) 그렇습니다. 절대적으로 잘 컴파일됩니다. IDE 용으로 NB 7.0을 사용하고 있으며 빌드 오류가 없습니다. (2) 예, 배경색을 설정하면 제대로 된 구성 요소를 볼 수 있습니다. (3) 실제로 NB GUI 빌더에 GUI를 설치하고 있는데, 근본적으로 의심 스럽습니다. (4)'JList' 생성자에서 모델을 설정 한 후에 모델을 수정 (요소를 추가, 제거)하는 것이 왜 문제가됩니까? 그것은 특히 Java의 경우 매우 역동적으로 들리지 않습니다! GUI 빌더에 대해 어떻게 생각하십니까? – IAmYourFaja

+0

또한 NB GUI 빌더는 변경 불가능한 코드를 자동 생성합니다 (NB 내부에서 편집 할 수 없음). GUI 빌더를 사용하여 JList의 모델을 세 가지 과일 값으로 설정하면 자동 생성 된 JList 생성자에 익명의 AbstractModel 하위 클래스가 추가 된 것을 볼 수 있습니다. 이것은 작동하는 것 같습니다. 내 자신의 * exact * 코드를 사용하면 작동하지 않습니다! 모델을 보지 못하게하는 JList에서 "pane"(루트 팬, 유리 팬 등을 실제로 이해할 수있는 편)을 코딩하십시오. – IAmYourFaja

+0

그래서이 코드는 작동 .... 아무도 왜 대답 할 수 ??? AbstractListModel dlm = new javax.swing.AbstractListModel() { String [] strings = { "Apple", "Orange", "Banana", "Pear"}; public int getSize() {strings.length를 반환합니다. } public Object getElementAt (int i) {문자열 반환 [i]; } }; lstAvailablePlans.setModel (dlm); – IAmYourFaja