Mittwoch, 11. Februar 2009

 

einfaches JList-Beispiel

Listen mit der Swing-Komponente JList sind etwas umständlich:
  1. muss man die JList in eine ScrollPane verpacken, damit man bei langen Listen Scrollen kann.
  2. muss man sich um das "ListModel" kümmern. Das ListModel dient zur Verwaltung von Daten in der Liste.
Es folgt ein einfaches Beispiel, welches in der Listbox Teststrings anzeigt. Mit einem Button kann man weitere Elemente entweder hinten anhängen (kein Element selektiert) oder vor der Selektion einfügen. Mit dem anderen Button kann man die gewählten Elemente löschen.
Hier der Source Code (eine Hilfsklasse List wird für die Listbox verwendet):

/**
* java-jlist: swing.Fenster.java
*
* 11.02.2009, Harald R. Haberstroh
*/

package swing;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
* Einfache Demo einer JList mit Einfügen und entfernen von Elementen.
*
* @author Harald R. Haberstroh (hp)
*
*/
public class Fenster extends JFrame {
private static final long serialVersionUID = -273011863852896510L;
private JPanel panel; // Hauptpanel
private JScrollPane listPane; // damit JList scrollfähig ist
private JPanel buttons; // eine Pabnel für die Buttons
private List list; // unsere Liste
private JButton addButton; // Button zum Einfügen
private JButton removeButton; // Button zum Löschen
private int nrElementsAdded = 0; // für die Testdaten

private void initialize() {
// Panel in die ContentPane des Fensters setzen
panel = new JPanel();
setContentPane(panel);

// Liste erzeugen
list = new List();
listPane = new JScrollPane(list); // verpacken in ScrollPane

// Layout für Hauptpane
panel.setLayout(new BorderLayout());
panel.add(listPane, BorderLayout.CENTER);

// die Buttons...
buttons = new JPanel();
buttons.setLayout(new FlowLayout());
addButton = new JButton("Add Element");
addButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
nrElementsAdded++;
if (list.getSelectedIndex() < 0) { // hinten einfügen
list.getContents().addElement("test " + nrElementsAdded);
} else { // an selektierter Stelle einfügen
list.getContents().add(list.getSelectedIndex(),
"test " + nrElementsAdded);
}
list.clearSelection();
}

});
buttons.add(addButton);

removeButton = new JButton("Remove Element(s)");
removeButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// alle selektierten Elemente
int[] indices = list.getSelectedIndices();
for (int index : indices) {
list.getContents().remove(index);
}
list.clearSelection();
}

});
buttons.add(removeButton);

// Buttonleiste ins Panel...
panel.add(buttons, BorderLayout.SOUTH);

// packe es auf brauchbare Größe
pack();

// Fenster schließen lassen (ohne Handler :-)
setDefaultCloseOperation(EXIT_ON_CLOSE);

// Zentriert am Bildschirm
setLocationRelativeTo(null);

// ein paar Elemente in die Liste einfügen
for (; nrElementsAdded < 10; nrElementsAdded++) {
list.getContents().addElement("test " + nrElementsAdded);
}
}

/**
* @throws HeadlessException
*/
public Fenster() throws HeadlessException {
super();
initialize();
}

/**
* @param gc
*/
public Fenster(GraphicsConfiguration gc) {
super(gc);
initialize();
}

/**
* @param title
* @param gc
*/
public Fenster(String title, GraphicsConfiguration gc) {
super(title, gc);
initialize();
}

/**
* @param title
* @throws HeadlessException
*/
public Fenster(String title) throws HeadlessException {
super(title);
initialize();
}

/**
* @param args
*/
public static void main(String[] args) {
new Fenster("JList Demo").setVisible(true);
}

}

/**
* Änderbare Liste.
*
* @author Harald R. Haberstroh (hp)
*
*/
class List extends JList {
List() {
super(new DefaultListModel());
}

DefaultListModel getContents() {
return (DefaultListModel) getModel();
}

}

Labels: ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]