~Java4Beginners~
~Java4Beginners~

JList

JList dient zur Listenanzeige einzelner Elemente. Ähnlich wie bei ComboBoxen können mehrere Einträge ausgewählt werden. Es ist aber auch möglich, die Auswahl auf nur 1 Eintrag zu beschränken, was z. B. bei Auswahl einer Hintergrundfarbe, oder einer Hilfeantwort Sinn macht.

Um auf Auswahl eines Listenelements reagieren zu können, benötigen wir den ListSelectionListener mit seiner abstrakten Methode public void valueChanged(ListSelectionEvent e).

notwendige Imports


import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

Konstruktoren

Konstruktor Beschreibung
JList() Erzeugt eine leere JList mit einem ReadOnly-Model
JList(E[] listData) Erzeugt eine JList mit den Elementen aus einem Array
JList(ListModel dataModel) Erzeugt eine JList, welche die Daten des dateModel's anzeigt
JList(Vector<? extends E> listData) Erzeugt eine JList, welche die Daten des spezifizierten Vector anzeigt.

Auswahl einiger Methoden

Methode Beschreibung
addListSelectionListener(ListSelectionListener listener) Fügt die Liste dem ListSelectionListener hinzug
clearSelection() Entfernt die Selektion
getFirstVisibleIndex() Gibt den Index-Wert des kleinsten, sichtbaren Elements zurück.
getLastVisibleIndex() Gibt den Index-Wert des größten, sichtbaren Elements zurück.
getLeadSelectionIndex() Gibt bei Mehrfach-Select den Index des führenden Elements zurück.
getMaxSelectionIndex() Gibt bei Mehrfach-Select den höchsten Indexwert der selectierten Elemente zurück.
getMinSelectionIndex() Gibt bei Mehrfach-Select den niedrigsten Indexwert der selectierten Elemente zurück.
getSelectedIndex() Gibt den kleinsten, selectierten Index zurück.
setSelectedIndex(int index) Selectiert das Element mit dem Index index.

ListSelectionModel

Im ListSelectionModel geben wir an, wie und wie viel in der JList selectiert, d. h. gleichzeitig ausgewählt werden kann. Das Model weisen wir mit der Methode setSelectionMode(selection_model) zu. Uns stehen 3 SelectionModels zur Verfügung.
ListSelectionModel Beschreibung
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION Dieses Model ist standardmäßig gesetzt und schränkt die Selectierung nicht ein.
ListSelectionModel.SINGLE_INTERVAL_SELECTION Es können mehrere Elemente selectiert werden, diese müssen allerdings zusammenhängend sein.
ListSelectionModel.SINGLE_SELECTION Es kann nur ein Listeneintrag selectiert werden.

Beispielprogramm

In diesem Beispielprogramm wird der JList ein Array mit 3 verschiedenen Farbwerten übergeben. Diese werden in der JList angzeigt. Single-Auswahl wird gesetzt.

Im ListSelectionListener setzen wir je nach Selection die Hintergrundfarbe des JPanels.

package GUIProgrammierung;

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * Beispiel zur Verwendung von JList
 * @author Markus Badzura
 */
public class Bedien_JList extends JFrame implements ListSelectionListener
{
    JPanel pan;
    JList jl;
    String[] farben = {"Blau", "Grün", "Gelb"};
    
    /**
     * Fenster erzeugen
     */
    public void Bedien_Jlist()
    {
        this.setTitle("Beispiel JList");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocation(100,100);
        this.setSize(400,400); 
        this.setLayout(null);
        pan = new JPanel();
        pan.setSize(this.getSize());
        pan.setLayout(null);
        jl = new JList(farben);
        jl.setBounds(10,10,300,300);
        jl.addListSelectionListener(this);
        jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        pan.add(jl);
        this.add(pan);
        this.setVisible(true);
    }
    /**
     * Start der Anwendung
     * @param args keine
     */
    public static void main(String[] args) {
        Bedien_JList bjl = new Bedien_JList();
        bjl.Bedien_Jlist();
    }
    /**
     * ListSelectionListener, um auf Listenauswahl zu reagieren
     * @param e 
     */
    @Override
    public void valueChanged(ListSelectionEvent e) 
    {
        if (e.getSource() == jl)
        {
            int fall = jl.getSelectedIndex();
            if (fall == 0) pan.setBackground(Color.BLUE);
            if (fall == 1) pan.setBackground(Color.GREEN);
            if (fall == 2) pan.setBackground(Color.YELLOW);
            jl.clearSelection();
        }
    }
}

JList dynamisch gestalten

Das gezeigt Beispielprogramm hat das Problem, dass die Auswahlliste fix ist. Wir können einer JList keine einzelne Werte hinzufügen oder entfernen. Um dieses zu ermöglichen, müssen wir mit einem ListModel arbeiten.

Das nächste Beispielprogramm basiert auf dem gerade gezeigten, allerdings werden wir keine ListSelectionEvent diesmal abrufen, sondern lediglich dafür sorgen, dass wir unsere Farbenliste während der Laufzeit anpassen können, d. h. Elemente hinzufügen und entfernen.

Neue Objekte werden hierbei immer ans Ende der Liste gesetzt. Das Hinzufügen und Entfernen passiert lediglich im ListModel. Die JList dient sozusagen nur noch als View-Element.


package GUIProgrammierung;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;

/**
 * Beispiel zur Verwendung von JList
 * @ author Markus Badzura
 */
public class Bedien_JListModel extends JFrame
{
    JPanel pan;
    JList jl;
    String[] farben = {"Blau", "Grün", "Gelb"};
    // Deklaration und Initialisierung vom ListModel
    DefaultListModel farbenliste = new DefaultListModel();
    /**
     * Fenster erzeugen
     */
    public void Bedien_JlistModel()
    {
        this.setTitle("Beispiel JList mit ListModel");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocation(100,100);
        this.setSize(400,400); 
        this.setLayout(null);
        pan = new JPanel();
        pan.setSize(this.getSize());
        pan.setLayout(null);
        // JListe mit listModel erstellen
        jl = new JList(farbenliste);
        jl.setBounds(10,10,300,300);
        jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        // String farben der JList hinzufügen
        for (int i = 0; i< farben.length;i++)
        {
            farbenliste.addElement(farben[i]);
        }
        // Neue Farbe einfügen. Hierfür muss der höchste Index ermittelt werden
        // Das Einfügen findet nun nach dem höchsten Index statt (+1)
        farbenliste.add(jl.getLastVisibleIndex()+1, "Orange");
        // Farbe entfernen
        farbenliste.removeElement("Grün");
        // Wenn wir einen bestimmten Index entfernen wollen, so verwenden wir
        farbenliste.removeElementAt(1);
        pan.add(jl);
        this.add(pan);
        this.setVisible(true);
    }
    /**
     * Start der Anwendung
     * @param args keine
     */
    public static void main(String[] args) {
        Bedien_JListModel bjl = new Bedien_JListModel();
        bjl.Bedien_JlistModel();
    }
}
nach oben Java4Beginners -- Seitenversion 1.0 -- Stand: 2017-06-04