Bizarro Swing JList Модель поведения - PullRequest
1 голос
/ 19 августа 2011

У меня возникла проблема в приложении Swing, где я создаю простой JList, передавая ему модель - и хотя модель наглядно заполняется, 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);

Когда мое приложение Swing запускается, я вижу JList на экране, но он полностью пуст! Я посмотрел на бесчисленные примеры, выложил уроки по Swing и не могу понять, что происходит. Кто-нибудь когда-нибудь случался с ними раньше?!? Что-нибудь, что явно-явно неправильно?!?

Примечание:

Следующее утверждение print действительно показывает, что в моей модели 3 элемента:

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

Однако , если я пытаюсь перебрать и напечатать имена фруктов в моей модели, вызывая (String)dlm.get(i) на каждой итерации (где i - это переменная итерации), он печатает каждый элемент модели как null ...

хммм

1 Ответ

0 голосов
/ 19 августа 2011

Этот код отлично работает для меня. Некоторые мысли:

  • Я вижу, что вы вызываете setVisible в JList, как именно вы добавляете его к тому, что отображаете?
  • Добавляете ли вы элементы после отображения своего JFrame? Если я правильно помню, это не сработает, думаю, вам придется все перекрасить.
  • Убедитесь, что вы не возитесь с моделью списка в какой-то момент; Может быть, в какой-то момент в коде вы его меняете?
  • Убедитесь, что вы действительно смотрите на нужный элемент; может быть, ваш список скрыт за чем-то другим? (попробуйте установить цвет фона, т.е. lstFruitList.setBackground(Color.BLUE);
  • Последняя мысль, вы уверены, что правильно скомпилировали? Иногда я случайно забывал о компиляции или что-то напутал, запускал старую версию кода и был озадачен, почему что-то не работает.

Для справки, вот код, который я запустил:

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);
    }
}
...