ClassEditor.java
package algorithmen.umleditor;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
* Editor für eine Klasse.
*/
public class ClassEditor extends Editor {
protected JTextField nameField;
protected JCheckBox abstractField;
protected Vector fieldsClone;
protected Vector methodsClone;
public ClassEditor(Class c, Frame p) {
super(c, 460, 550, p);
}
public ClassEditor(Class c, Dialog p) {
super(c, 460, 550, p);
}
protected void buildMainPanel(JPanel mp) {
mp.setLayout(new BoxLayout(mp, BoxLayout.Y_AXIS));
Class c = (Class) model;
JPanel topPanel = new JPanel(new GridLayout(1, 2));
// add name field
JPanel namePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
namePanel.add(new JLabel("Name:"));
nameField = new JTextField(c.getName(), 15);
namePanel.add(nameField);
// add static field
JPanel abstractPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
abstractPanel.add(new JLabel("abstract:"));
abstractField = new JCheckBox();
abstractField.setSelected(c.isAbstract());
abstractPanel.add(abstractField);
// Listeditorpanel für die Feldliste hinzufügen
// bekommt eine (tiefe!) Kopie der Liste, damit beim
// Abbrechen alle Änderungen verschwinden.
fieldsClone = (Vector) c.getFields().clone(); // leider flacher Klon!
for (int i = 0; i < fieldsClone.size(); i++) {
fieldsClone.set(i, ((Field) fieldsClone.get(i)).clone());
}
// Listeditorpanel für die Methodenliste hinzufügen
methodsClone = (Vector) c.getMethods().clone(); // leider flacher Klon!
for (int i = 0; i < methodsClone.size(); i++) {
methodsClone.set(i, ((Method) methodsClone.get(i)).clone());
}
// alles zusammenbauen
topPanel.add(namePanel);
topPanel.add(abstractPanel);
mp.add(topPanel);
mp.add(new ListEditorPanel(fieldsClone, "Felder", new FieldView(), this));
mp.add(new ListEditorPanel(methodsClone, "Methoden", new MethodView(), this));
}
protected void update() {
Class c = (Class) model;
c.setName(nameField.getText());
c.setAbstract(abstractField.isSelected());
c.setFields(fieldsClone);
c.setMethods(methodsClone);
}
}