Example usage for com.jgoodies.forms.builder DefaultFormBuilder DefaultFormBuilder

List of usage examples for com.jgoodies.forms.builder DefaultFormBuilder DefaultFormBuilder

Introduction

In this page you can find the example usage for com.jgoodies.forms.builder DefaultFormBuilder DefaultFormBuilder.

Prototype

public DefaultFormBuilder(FormLayout layout) 

Source Link

Document

Constructs a DefaultFormBuilder for the given layout.

Usage

From source file:edu.ku.brc.af.ui.forms.ResultSetController.java

License:Open Source License

/**
 * Creates the UI for the controller.//from  www .  j ava2 s. c  o  m
 * @param addNewBtn indicates it should include the "Add" (New Object) button
 * @param addDelBtn indicates it should include Delete button
 * @param objTitle the title of a single object in the controller (used for building tooltips)
 */
protected void buildRecordNavBar(final boolean addNewBtn, final boolean addDelBtn, final boolean addSearchBtn,
        final String objTitle) {
    String colDef = "p,2dlu,p,2dlu,max(50dlu;p):grow,2dlu,p,2dlu,p" + (addNewBtn ? ",12px,p" : "")
            + (addDelBtn ? ",2dlu,p" : "") + (addSearchBtn ? ",2dlu,p" : "");

    Insets insets = new Insets(1, 1, 1, 1);
    DefaultFormBuilder rowBuilder = new DefaultFormBuilder(new FormLayout(colDef, "p"));

    firstBtn = UIHelper.createIconBtn("FirstRec", null, null);
    prevBtn = UIHelper.createIconBtn("PrevRec", null, null);
    btnsHash.put(CommandType.Previous, prevBtn);
    btnsHash.put(CommandType.First, firstBtn);

    recDisp = createLabel("  ");
    recDisp.setHorizontalAlignment(SwingConstants.CENTER);
    recDisp.setOpaque(true);
    recDisp.setBackground(Color.WHITE);
    recDisp.setBorder(enabledBorder);
    recDisp.setFont(recDisp.getFont().deriveFont(recDisp.getFont().getSize2D() - 2));

    MouseListener mouseListener = new MouseAdapter() {
        private boolean showIfPopupTrigger(MouseEvent mouseEvent) {
            if (mouseEvent.isPopupTrigger()) {
                JPopupMenu popupMenu = createPopupMenu();
                if (popupMenu != null && popupMenu.getComponentCount() > 0) {
                    popupMenu.show(mouseEvent.getComponent(), mouseEvent.getX(), mouseEvent.getY());
                    return true;
                }
            }
            return false;
        }

        @Override
        public void mousePressed(MouseEvent mouseEvent) {
            showIfPopupTrigger(mouseEvent);
        }

        @Override
        public void mouseReleased(MouseEvent mouseEvent) {
            showIfPopupTrigger(mouseEvent);
        }

        /* (non-Javadoc)
         * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
         */
        @Override
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 2) {
                if (numRecords == 1) {
                    UIRegistry.writeTimedSimpleGlassPaneMsg(getResourceString("OnlyOneRrecordInCon"));
                } else {
                    showGotoRecDlg();
                }
            }
        }
    };
    recDisp.addMouseListener(mouseListener);

    nextBtn = UIHelper.createIconBtn("NextRec", null, null);
    lastBtn = UIHelper.createIconBtn("LastRec", null, null);
    btnsHash.put(CommandType.Next, nextBtn);
    btnsHash.put(CommandType.Last, lastBtn);

    firstBtn.setToolTipText(createTooltip("GotoFirstRecordTT", objTitle));
    prevBtn.setToolTipText(createTooltip("GotoPreviousRecordTT", objTitle));
    nextBtn.setToolTipText(createTooltip("GotoNextRecordTT", objTitle));
    lastBtn.setToolTipText(createTooltip("GotoLastRecordTT", objTitle));

    firstBtn.setOpaque(false);
    prevBtn.setOpaque(false);
    nextBtn.setOpaque(false);
    lastBtn.setOpaque(false);

    CellConstraints cc = new CellConstraints();
    rowBuilder.add(firstBtn, cc.xy(1, 1));
    rowBuilder.add(prevBtn, cc.xy(3, 1));
    rowBuilder.add(recDisp, cc.xy(5, 1));
    rowBuilder.add(nextBtn, cc.xy(7, 1));
    rowBuilder.add(lastBtn, cc.xy(9, 1));
    int col = 11;

    if (addNewBtn) {
        if (false) {
            newRecBtn = new JButton("+") {
                public void setEnabled(boolean enable) {
                    //log.debug("newRecBtn - RS: "+ formValidator.getName() + " " + newRecBtn.hashCode() + " "+enable+"  isNewObj: "+isNewObj);
                    if (formValidator != null && formValidator.getName() != null
                            && formValidator.getName().equals("Collection Object")) {
                        int x = 0;
                        x++;
                        if (enable) {
                            int y = 0;
                            y++;
                        }
                    }
                    if (enable) {
                        int x = 0;
                        x++;
                    }
                    super.setEnabled(enable);
                }
            };
            setControlSize(newRecBtn);

            ActionListener l = new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    for (ResultSetControllerListener rscl : listeners) {
                        rscl.newRecordAdded();
                    }
                }
            };
            newRecBtn.addActionListener(l);

        } else {
            newRecBtn = UIHelper.createIconBtn("NewRecord", null, new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    for (ResultSetControllerListener rscl : listeners) {
                        rscl.newRecordAdded();
                    }
                }
            });
        }

        newRecBtn.setToolTipText(createTooltip("NewRecordTT", objTitle));
        newRecBtn.setEnabled(true);
        newRecBtn.setMargin(insets);
        btnsHash.put(CommandType.NewItem, newRecBtn);

        if (doLayoutBtns) {
            rowBuilder.add(newRecBtn, cc.xy(col, 1));
            col += 2;
        }
    }

    if (addDelBtn) {
        if (false) {
            delRecBtn = new JButton("-") {
                public void setEnabled(boolean enable) {
                    //log.debug("delRecBtn - RS: "+formValidator.getName() + " " + hashCode() + " "+enable);
                    if (formValidator != null && formValidator.getName() != null
                            && formValidator.getName().equals("Permit")) {
                        int x = 0;
                        x++;
                    }
                    if (!enable) {
                        int x = 0;
                        x++;
                    }
                    super.setEnabled(enable);
                }
            };
        } else {
            delRecBtn = UIHelper.createIconBtn("DeleteRecord", null, null);
        }
        delRecBtn.setToolTipText(createTooltip("DeleteRecordTT", objTitle));
        delRecBtn.setMargin(insets);
        btnsHash.put(CommandType.DelItem, delRecBtn);

        if (doLayoutBtns) {
            rowBuilder.add(delRecBtn, cc.xy(col, 1));
            col += 2;
        }
    }

    if (addSearchBtn) {
        searchRecBtn = UIHelper.createIconBtn("Search", IconManager.IconSize.Std16, null, null);
        searchRecBtn.setToolTipText(createTooltip("SearchForRecordTT", objTitle));
        searchRecBtn.setMargin(insets);

        if (doLayoutBtns) {
            rowBuilder.add(searchRecBtn, cc.xy(col, 1));
            col += 2;
        }
    }

    firstBtn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            firstRecord();
        }
    });
    prevBtn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            prevRecord();
        }
    });
    nextBtn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            nextRecord();
        }
    });
    lastBtn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            lastRecord();
        }
    });

    // Make sure it gets centered
    rowBuilder.getPanel().setOpaque(false);
    DefaultFormBuilder outerCenteredPanel = new DefaultFormBuilder(new FormLayout("c:p:g", "p"));
    outerCenteredPanel.add(rowBuilder.getPanel(), cc.xy(1, 1));
    panel = outerCenteredPanel.getPanel();
    panel.setOpaque(false);
}

From source file:edu.ku.brc.af.ui.forms.ResultSetController.java

License:Open Source License

/**
 * //from  w  ww  . j  av  a 2  s.  c o  m
 */
protected void showGotoRecDlg() {
    JTextField tf = UIHelper.createTextField(5);

    CellConstraints cc = new CellConstraints();
    DefaultFormBuilder p = new DefaultFormBuilder(new FormLayout("p,2px,f:p:g", "p"));
    p.add(UIHelper.createI18NLabel("RS_NUM_LBL"), cc.xy(1, 1));
    p.add(tf, cc.xy(3, 1));
    p.setDefaultDialogBorder();

    CustomDialog dlg = new CustomDialog((Frame) null, "", true, CustomDialog.OKCANCEL, p.getPanel());
    dlg.setCustomTitleBar(getResourceString("RS_JUMP_TITLE"));

    UIHelper.centerAndShow(dlg);
    if (!dlg.isCancelled()) {
        String recNumStr = tf.getText();
        if (!recNumStr.isEmpty() && StringUtils.isNumeric(recNumStr)) {
            try {
                int recNum = Integer.parseInt(recNumStr);
                if (recNum > 0 && recNum <= lastInx) {
                    setIndex(recNum - 1);
                }
            } catch (Exception ex) {
            }
        }
    }
}

From source file:edu.udo.scaffoldhunter.gui.datacalculation.CalcDialog.java

License:Open Source License

private JPanel createPluginDescriptionPanel(CalcPlugin plugin) {
    FormLayout layout = new FormLayout("p", "");
    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
    WordWrapLabel description = new WordWrapLabel(plugin.getDescription());
    description.setMaximumWidth(600);/*from   w w w . j a v a2 s. c  om*/

    builder.appendSeparator(_("DataCalc.PluginDescription"));
    builder.append(description);
    builder.appendUnrelatedComponentsGapRow();

    return builder.getPanel();
}

From source file:edu.udo.scaffoldhunter.gui.dataimport.PropertyDefinitonCreationDialog.java

License:Open Source License

/**
 * Create a new dialog/*  w  w  w  .j a  v  a2 s.  co  m*/
 * 
 * @param owner
 *            the owner of the new dialog
 * @param title
 *            a proposed title for this property definition
 * @param probablyNumeric
 *            the default behavior for the Numeric checkbox
 */
public PropertyDefinitonCreationDialog(Dialog owner, String title, boolean probablyNumeric) {
    super(owner, _("DataImport.PropertyDefinitionCreationDialog.Title"), true);

    type.setRenderer(new PropertyTypeRenderer());
    if (probablyNumeric) {
        type.setSelectedItem(PropertyType.NumProperty);
    }

    FormLayout layout = new FormLayout("r:p, 3dlu, MAX(150dlu;p):g");
    DefaultFormBuilder builder = new DefaultFormBuilder(layout);

    builder.setDefaultDialogBorder();
    titleField.setText(title);
    SelectAllOnFocus.addTo(titleField);
    builder.append(_("PropertyDefinition.Title"), titleField);
    builder.append(_("PropertyDefinition.Type"), type);
    builder.append(_("PropertyDefinition.Description"), new JScrollPane(getDescriptionArea()));
    JButton okButton = getOkButton();
    builder.append(ButtonBarFactory.buildOKCancelBar(okButton, getCancelButton()), 3);

    setLayout(new BorderLayout());
    add(builder.getPanel(), BorderLayout.CENTER);

    getRootPane().setDefaultButton(okButton);
    setLocationRelativeTo(owner);
    pack();
}

From source file:edu.udo.scaffoldhunter.gui.dialogs.InitialViewDialog.java

License:Open Source License

private JPanel buildPropertyPanel() {
    FormLayout layout = new FormLayout("p, 3dlu, c:p, 3dlu, c:p");
    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
    builder.setDefaultDialogBorder();/*from w w w  .j ava2  s  .co m*/
    for (String viewName : views.keySet()) {
        JCheckBox view = new JCheckBox();
        view.setText(viewName);
        view.setActionCommand(viewName);
        view.addActionListener(selectionListener);
        view.setSelected(true);
        selectedViews.add(viewName);
        builder.append(view);
        this.checkBoxes.add(view);
        builder.nextLine();
    }
    return builder.getPanel();
}

From source file:edu.udo.scaffoldhunter.gui.dialogs.SubsetFromRingDialog.java

License:Open Source License

/**
 * @param parent//  w w  w  .  ja v  a 2 s. c om
 * @param minRingCount 
 * @param maxRingCount 
 * @param location
 * @param anchor
 */
public SubsetFromRingDialog(Frame parent, final int minRingCount, final int maxRingCount, Point location,
        Anchor anchor) {
    super(parent, _("ScaffoldTreeView.SubsetFromRing.Title"), true);

    returnValue = JOptionPane.CANCEL_OPTION;

    FormLayout layout = new FormLayout("pref:grow", "");

    DefaultFormBuilder pb = new DefaultFormBuilder(layout);
    pb.setDefaultDialogBorder();
    JLabel description = new JLabel(
            "<html><div width=300>" + _("ScaffoldTreeView.SubsetFromRing.Description") + "</div></html>");
    pb.append(description);
    pb.appendSeparator();

    ringLevelComboBox = new JComboBox<Integer>();
    ringLevelComboBox.setModel(new DefaultComboBoxModel<Integer>() {

        @Override
        public Integer getElementAt(int index) {
            return index == 0 ? null : index + minRingCount - 1;
        }

        @Override
        public int getSize() {
            return maxRingCount - minRingCount + 2;
        }
    });
    ringLevelComboBox.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent evt) {
            updateAllowOK();
        }
    });
    pb.append(_("ScaffoldTreeView.SubsetFromRing.SelectRingLevel"), ringLevelComboBox);

    textField = new JTextField(_("ScaffoldTreeView.SubsetFromRing.DefaultSplitName"));

    textField.selectAll();

    textField.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            updateAllowOK();
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            updateAllowOK();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
        }
    });
    pb.append(_("ScaffoldTreeView.SubsetFromRing.SubsetName"), textField);

    errorLabel = new JLabel(" ");
    errorLabel.setForeground(Color.red);

    pb.append(errorLabel);
    okButton = StandardButtonFactory.createOKButton(okAction);
    okButton.setEnabled(false);

    cancelButton = StandardButtonFactory.createCancelButton(cancelAction);
    JPanel p = ButtonBarFactory.buildOKCancelBar(okButton, cancelButton);
    pb.append(p);
    getRootPane().setDefaultButton(okButton);

    // allow escape key to close the dialog
    getRootPane().registerKeyboardAction(cancelAction, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
            JComponent.WHEN_IN_FOCUSED_WINDOW);

    setContentPane(pb.getPanel());
    setMinimumSize(new Dimension(280, 0));
    pack();
    setResizable(false);

    if (location == null) {
        setLocationRelativeTo(parent);
    } else {
        switch (anchor) {
        case TOP_LEFT:
            // nothing to do
            break;
        case TOP_RIGHT:
            location.translate(-getWidth(), 0);
            break;
        }

        // make sure the dialog stays on screen
        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        location.x = Math.min(location.x, screen.width - getWidth());
        location.y = Math.min(location.y, screen.height - getHeight());

        setLocation(location);
    }
}

From source file:edu.udo.scaffoldhunter.gui.dialogs.TooltipConfigurationDialog.java

License:Open Source License

private JPanel buildPropertyPanel() {
    FormLayout layout = new FormLayout("p, 3dlu, c:p:g(.5), 3dlu, c:p:g(.5)");
    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
    builder.setDefaultDialogBorder();//w w w .j  a  v  a2 s  .c  om

    List<PropertyDefinition> propDefs = Orderings.PROPERTY_DEFINITION_BY_TITLE
            .sortedCopy(dataset.getPropertyDefinitions().values());

    Collections.sort(propDefs, Orderings.PROPERTY_DEFINITION_BY_PROPERTY_TYPE);
    Iterable<PropertyDefinition> molPropDefs = Iterables.filter(propDefs,
            Predicates.not(SHPredicates.IS_SCAFFOLD_PROPDEF));
    Iterable<PropertyDefinition> scaffoldPropDefs = Iterables.filter(propDefs,
            SHPredicates.IS_SCAFFOLD_PROPDEF);
    if (!Iterables.isEmpty(molPropDefs)) {
        builder.appendSeparator(I18n.get("Tooltip.PropertyTitles.Molecule"));
        builder.nextLine();
        buildTitle(builder, true);
        for (PropertyDefinition propDef : molPropDefs) {
            addProperty(builder, propDef);
            builder.nextLine();
        }
    }

    if (!Iterables.isEmpty(scaffoldPropDefs)) {
        builder.appendSeparator(I18n.get("Tooltip.PropertyTitles.Scaffold"));
        buildTitle(builder, false);
        for (PropertyDefinition propDef : scaffoldPropDefs) {
            addProperty(builder, propDef);
            builder.nextLine();
        }
    }

    return builder.getPanel();
}

From source file:edu.udo.scaffoldhunter.gui.GUIController.java

License:Open Source License

/**
 * Shows a password dialog and blocks the current thread until the dialog is
 * closed./*ww  w.  ja v  a2s.  c  o  m*/
 * 
 * @param data
 *            url, database name and username of this object are displayed
 *            in the dialog
 * 
 * @return the password if the user entered a password and clicked OK, null
 *         otherwise
 */
private String showPasswordDialog(ConnectionData data) {
    // Build the password panel
    final JPasswordField pwField = new JPasswordField();
    DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("left:default, default, 200dlu"));
    builder.append("URL: ", new JLabel(data.getDbUrl()));
    builder.append("Database: ", new JLabel(data.getDbName()));
    builder.append("Username: ", new JLabel(data.getDbUsername()));
    builder.append(pwField, 3);

    // Show a password dialog with a nasty hack to set the focus to the
    // password field.
    // There is no beautiful way of focusing the field:
    // http://bugs.sun.com./bugdatabase/view_bug.do?bug_id=5018574
    // The solution used here is: repeat setFocus using a timer until user
    // pressed key in password field
    // TODO maybe write a class PasswordDialog which sets up the dialog
    // manually, so that we get rid of this hack
    JOptionPane pwPane = new JOptionPane(builder.getPanel(), JOptionPane.PLAIN_MESSAGE,
            JOptionPane.OK_CANCEL_OPTION);
    JDialog pwDialog = pwPane.createDialog("Enter password:");
    final Timer timer = new Timer(1, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            pwField.requestFocusInWindow();
        }
    });
    timer.setRepeats(true);
    timer.start();
    pwField.addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {
        }

        @Override
        public void keyReleased(KeyEvent e) {
        }

        @Override
        public void keyPressed(KeyEvent e) {
            timer.stop();
        }
    });
    pwDialog.setVisible(true);

    // Handle return value
    Object returnValue = pwPane.getValue();
    if (returnValue instanceof Integer) {
        int result = (Integer) returnValue;
        if (result == JOptionPane.OK_OPTION) {
            return new String(pwField.getPassword());
        }
    }
    // User clicked cancel or closed the dialog
    return null;
}

From source file:edu.umich.robot.SoarDataView.java

License:Open Source License

public SoarDataView(PropertyManager properties) {
    this.properties = properties;

    FormLayout layout = new FormLayout("right:pref, 4dlu, 60dlu", "");
    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
    builder.setDefaultDialogBorder();//from  ww  w .  ja va2 s. c  o m

    builder.appendSeparator("collection mode");
    ButtonGroup group = new ButtonGroup();
    for (DataCollectionMode s : DataCollectionMode.values()) {
        JRadioButton b = new JRadioButton();
        b.setSelected(properties.get(SoarProperties.DATA_COLLECTION_MODE) == s);
        modeButtons.put(s, b);
        group.add(b);
        builder.append(s.toString().toLowerCase(), b);
    }

    builder.appendSeparator("collection period");
    periodCycles = new JTextField();
    periodCycles.setText(Integer.toString(properties.get(SoarProperties.PERIOD_CYCLES)));
    builder.append("Collect data every n decision cycles", periodCycles);

    periodMillis = new JTextField();
    periodMillis.setText(Integer.toString(properties.get(SoarProperties.PERIOD_MILLIS)));
    builder.append("Collect data every n milliseconds", periodMillis);

    ActionListener al = new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            periodCycles.setEnabled(modeButtons.get(DataCollectionMode.DECISION_CYCLES).isSelected());
            periodMillis.setEnabled(modeButtons.get(DataCollectionMode.ELAPSED_TIME).isSelected());
        }
    };
    al.actionPerformed(null);

    modeButtons.get(DataCollectionMode.DECISION_CYCLES).addActionListener(al);
    modeButtons.get(DataCollectionMode.ELAPSED_TIME).addActionListener(al);

    builder.appendSeparator("file");
    file = properties.get(SoarProperties.DATA_FILE);
    fileLabel = new JLabel();
    updateFileLabel();
    chooser = new JButton("...");
    builder.append("Data file", fileLabel);
    builder.append("Click to pick data file:");
    builder.append(chooser);

    cancel = new JButton("Cancel");
    builder.append(cancel);

    ok = new JButton("OK");
    builder.append(ok);

    panel = builder.getPanel();
}

From source file:edu.umich.robot.SoarParametersView.java

License:Open Source License

public SoarParametersView(PropertyManager properties) {
    this.properties = properties;

    FormLayout layout = new FormLayout("right:pref, 4dlu, 100dlu", "");

    DefaultFormBuilder builder = new DefaultFormBuilder(layout);
    builder.setDefaultDialogBorder();/*from   ww  w .j  av a 2s  .c  o  m*/

    builder.appendSeparator(AgentProperties.LEARN.toString());
    ButtonGroup learnGroup = new ButtonGroup();
    for (LearnSetting s : LearnSetting.values()) {
        JRadioButton b = new JRadioButton();
        b.setSelected(properties.get(AgentProperties.LEARN) == s);
        learnButtons.put(s, b);
        learnGroup.add(b);
        builder.append(s.toString().toLowerCase(), b);
    }

    builder.appendSeparator("epmem, smem");

    epmemLearn.setSelected(properties.get(AgentProperties.EPMEM_LEARNING));
    builder.append(AgentProperties.EPMEM_LEARNING.toString(), epmemLearn);

    smemLearn.setSelected(properties.get(AgentProperties.SMEM_LEARNING));
    builder.append(AgentProperties.SMEM_LEARNING.toString(), smemLearn);

    Joiner joiner = Joiner.on(" ");
    epmemExclusions.setText(joiner.join(properties.get(AgentProperties.EPMEM_EXCLUSIONS)));
    builder.append(AgentProperties.EPMEM_EXCLUSIONS.toString(), epmemExclusions);

    builder.appendSeparator("working memory parameters");

    addSpField(builder, AgentProperties.DEFAULT_STORAGE_AREA_ID);
    addSpField(builder, AgentProperties.AREAS_HELD_IN);
    addSpField(builder, AgentProperties.OBJECTS_HELD_IN);
    addSpField(builder, AgentProperties.LOOK_AHEAD_PLANNING);
    addSpField(builder, AgentProperties.SEARCH_CONTROL_GO_TO_GATEWAY);
    addSpField(builder, AgentProperties.DELETE_OLD_AREAS);

    builder.appendSeparator("working memory parameters: mission");

    ButtonGroup missionGroup = new ButtonGroup();
    for (Mission s : Mission.values()) {
        JRadioButton b = new JRadioButton();
        b.setSelected(properties.get(AgentProperties.MISSION) == s);
        missionButtons.put(s, b);
        missionGroup.add(b);
        builder.append(s.toString(), b);
    }

    builder.appendSeparator("miscellaneous commands");

    misc.setRows(4);
    joiner = Joiner.on("\n");
    misc.setText(joiner.join(properties.get(AgentProperties.MISC_COMMANDS)));
    builder.append(new JScrollPane(misc), 3);

    cancel = new JButton("Cancel");
    ok = new JButton("OK");

    builder.append(cancel);
    builder.append(ok);

    panel = builder.getPanel();
}