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);  
  }
  
}