Ich versuche, eine generische JList mit einem DefaultListModel in einem JScrollPane behandelt. Ich kann jedoch die JList nicht sehen. HierDefaultListModel in JList in JScrollPane, kann die JList nicht sehen
ist die Klasse:
FieldScrollList:
public class FieldScrollList<T> extends JScrollPane {
private DefaultListModel<T> listModel;
public int length() {
return listModel.size();
}
public FieldScrollList() {
setBorder(new TitledBorder(this.getClass().getSimpleName()));
setBackground(Color.PINK);
listModel = new DefaultListModel<>();
JList<T> jList = new JList<>(listModel);
add(jList);
jList.setBorder(new TitledBorder(jList.getClass().getSimpleName()));
}
public void clear() {
listModel.clear();
}
public void push(T t) {
listModel.add(length(),t);
}
public <C extends Collection<T>> void pushAll(C coll) {
coll.forEach(this::push);
}
public void pushAll(T[] coll) {
for (T t : coll) {
push(t);
}
}
}
Und hier ist die Klasse, es zu benutzen. In diesem Beispiel habe ich eine FieldScrollList, die Listenelemente anzeigen soll: Hallo und Hallo.
public class test {
public static void main(String[] args) {
new Thread(() -> {
//---------------------------------- Content initialization ------------------
JFrame frame = new JFrame("Test");
JPanel panel = new JPanel();
FieldScrollList<String> list = new FieldScrollList<String>();
//---------------------------------- Strings initialization ------------------
ArrayList<String> strings = new ArrayList<>();
strings.add("Hello");
strings.add("Hi");
strings.forEach(list::push);
//---------------------------------- JPanel configuration --------------------
panel.setLayout(new GridLayout(1,1));
panel.add(list);
//---------------------------------- JFrame configuration --------------------
frame.add(panel);
frame.setPreferredSize(new Dimension(550,600));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}).start();
}
}
Und das Ergebnis ist wie folgt aus:
Das Ziel der Grenzen und setbackgrounds sind die Lage und Fläche der Inhalte anzuzeigen (visuell)
I don‘ t verstehe, warum die Felder nicht angezeigt werden
Müssen Sie 'JScrollPane' wirklich erweitern? – Berger
Ich begann mit einem JPanel, aber ich muss es nur als Komponente verwenden können. Was sollte der Beste sein? –
'revalidate();' 'repaint();' versuchen Sie dies, nachdem Sie die jList –