Mittwoch, 11. Februar 2009
einfaches JList-Beispiel
Listen mit der Swing-Komponente JList sind etwas umständlich:
Hier der Source Code (eine Hilfsklasse List wird für die Listbox verwendet):
- muss man die JList in eine ScrollPane verpacken, damit man bei langen Listen Scrollen kann.
- muss man sich um das "ListModel" kümmern. Das ListModel dient zur Verwaltung von Daten in der Liste.
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();
}
}
Abonnieren Posts [Atom]
Kommentar veröffentlichen