maak JList zonder verzamelingen

Ik heb een probleem met mijn oefening voor de universiteit. Ik moet een JList maken en daar een paar elementen plaatsen (slechts een eenvoudige tekst) zonder verzamelingen of arrays te gebruiken. Het is nogal dwaas omdat een JList meestal wordt geïnitialiseerd met DefaultListModel (het is ook een verzameling), maar in dit geval mag ik het niet gebruiken. Ik heb geprobeerd een JLabel-object in een geparametriseerde constructor van JList te plaatsen, maar het werkt niet. Heeft iemand van jullie een idee hoe hiermee om te gaan? Bij voorbaat hartelijk dank voor uw hulp.

Mijn code tot nu toe:

JFrame jFrame = new JFrame("title");
JList<String> jList = new JList<>();
jList.add(new JLabel("label1"));
jFrame.add(jList);
jFrame.setSize(500, 500);
jFrame.setVisible(true);

Antwoord 1

Als ik je studie goed begrijp, hoef je alleen maar een lijstmodel te maken, dat eenvoudig de constante waarde retourneert of de rijwaarde kan berekenen met behulp van een formule.

Hier is mijn suggestie voor jou.

import javax.swing.AbstractListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class SimpleListExample implements Runnable {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new SimpleListExample());
    }
    @Override
    public void run() {
        JList<String> list = new JList<>(new SimpleListModel());
        JFrame frame = new JFrame("List example");
        frame.add(new JScrollPane(list));
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(350, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    @SuppressWarnings("serial")
    private static class SimpleListModel extends AbstractListModel<String> {
        @Override
        public int getSize() {
            return 20;
        }
        @Override
        public String getElementAt(int index) {
            // Generate constant value with the row index ;)
            return "It's row number: " + (index + 1);
        }
    }
}

Other episodes