ListEditorPanel.java
package algorithmen.umleditor;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
/**
* Panel zum Editieren einer Liste (definiert als Vector).
* Zeigt die Liste an und Buttons zum Löschen, Ändern und Hinzufügen
* von Elementen.
*/
public class ListEditorPanel extends JPanel {
protected JList listField;
protected Vector theList;
protected View elementView;
protected JDialog parent;
/**
* Erzeugt einen Editor für eine Liste list von UmlObjekten mit Titel string.
* Der View subview ermöglicht, einen passenden Editor für die Objekte zu
* erzeugen.
* Der Parameter dialog ist der aufrufende JDialog (Editor) selbst, er ist
* Bezugspunkt für den modalen Untereditor.
*/
public ListEditorPanel(Vector list, String title, View view, JDialog parent) {
super(new BorderLayout());
int bSize = 3;
Border emptyBorder = BorderFactory.createEmptyBorder(bSize, bSize, bSize, bSize);
setBorder(emptyBorder);
theList = list;
elementView = view;
this.parent = parent;
JLabel titleLabel = new JLabel(title + ":");
titleLabel.setBorder(emptyBorder);
listField = new JList();
listField.setListData(list);
listField.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(listField);
// rechts kommen drei Buttons dazu
Box buttonBox = new Box(BoxLayout.Y_AXIS);
buttonBox.setBorder(emptyBorder);
JButton newButton = new JButton("Neu");
newButton.addActionListener(new AddListener());
newButton.setMaximumSize(new Dimension(100, 25));
JButton changeButton = new JButton("Ändern");
changeButton.addActionListener(new ChangeListener());
changeButton.setMaximumSize(new Dimension(100, 25));
JButton deleteButton = new JButton("Löschen");
deleteButton.addActionListener(new DeleteListener());
deleteButton.setMaximumSize(new Dimension(100, 25));
buttonBox.add(newButton);
buttonBox.add(changeButton);
buttonBox.add(deleteButton);
// und jetzt Komponenten zusammensez
add(titleLabel, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
add(buttonBox, BorderLayout.EAST);
}
class AddListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
UmlElement o = elementView.createStandardObject();
theList.add(o);
listField.setListData(theList);
repaint();
}
}
class ChangeListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
int index = listField.getSelectedIndex();
if (index != -1) {
UmlElement o = (UmlElement) theList.get(index);
elementView.createEditor(o, parent);
repaint();
}
}
}
class DeleteListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
int index = listField.getSelectedIndex();
if (index != -1) {
theList.remove(index);
repaint();
}
}
}
}