public Editor(JFrame parent, Evaluator evaluator) {
      super(parent, "Structure");
      setModal(true);
      this.evaluator = evaluator;

      getContentPane().setLayout(new BorderLayout());

      // name and type
      JPanel pNameType = new JPanel(new GridLayout(2, 1));
      JPanel pName = new JPanel(new BorderLayout());
      pName.add(new JLabel("Name: "), BorderLayout.WEST);
      tfName = new JTextField(evaluator.getName());
      pName.add(tfName, BorderLayout.CENTER);
      pNameType.add(pName);
      JPanel pType = new JPanel(new BorderLayout());
      pType.add(new JLabel("Type: "), BorderLayout.WEST);
      cbType = new JComboBox(types);
      cbType.setEditable(false);
      cbType.setSelectedIndex(evaluator.type);
      cbType.addItemListener(this);
      pType.add(cbType, BorderLayout.CENTER);
      pNameType.add(pType);
      getContentPane().add(pNameType, BorderLayout.NORTH);

      // options panel
      this.clOptions = new CardLayout();
      this.pOptions = new JPanel(clOptions);

      JPanel pConstraintRoot = new JPanel(new BorderLayout());
      Box pConstraintOpts = new Box(BoxLayout.Y_AXIS);
      JPanel pDiagonals = new JPanel(new BorderLayout());
      cbDiagonals = new JCheckBox("Ignore Diagonals", evaluator.ignoreDiagonals);
      pDiagonals.add(cbDiagonals, BorderLayout.CENTER);
      pConstraintOpts.add(pDiagonals);
      JPanel pInvestment = new JPanel(new BorderLayout());
      pInvestment.add(new Label("Investments "), BorderLayout.WEST);
      cbInvestment = new JComboBox(investments);
      cbInvestment.setEditable(false);
      cbInvestment.setSelectedIndex(evaluator.investments);
      pInvestment.add(cbInvestment, BorderLayout.CENTER);
      pConstraintOpts.add(pInvestment);
      JPanel pOrganization = new JPanel(new GridLayout(2, 1));
      lOrgFileName = new JLabel("File: <none selected>");
      pOrganization.add(lOrgFileName);
      JPanel pFileChoose = new JPanel(new FlowLayout(FlowLayout.CENTER));
      JButton bFileChoose = new JButton("Choose File...");
      bFileChoose.addActionListener(this);
      bFileChoose.setActionCommand(CMD_CHOOSE_FILE);
      pFileChoose.add(bFileChoose);
      pOrganization.add(pFileChoose);
      pConstraintOpts.add(pOrganization);
      pConstraintRoot.add(pConstraintOpts, BorderLayout.NORTH);
      pOptions.add(pConstraintRoot, types[CONSTRAINT]);

      JPanel pSizeRoot = new JPanel(new BorderLayout());
      pOptions.add(pSizeRoot, types[EFFECTIVE_SIZE]);
      clOptions.first(pOptions);

      getContentPane().add(BorderLayout.CENTER, pOptions);

      // ok/cancel panel
      JOkCancelPanel okCancelPanel = new JOkCancelPanel();
      okCancelPanel.addActionListener(this);
      getContentPane().add(BorderLayout.SOUTH, okCancelPanel);

      pack();
    }
 public void itemStateChanged(ItemEvent evt) {
   // only on 'selection' event
   if (evt.getStateChange() == ItemEvent.SELECTED) {
     clOptions.show(pOptions, types[cbType.getSelectedIndex()]);
   }
 }