private void buildUI(Frame owner) {
    JPanel wrapper = new JPanel(new GridLayout());
    wrapper.add(variableTree);

    variableTree.setOwner(owner);
    variableTree.setDoubleClickAction(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            done();
          }
        });

    variableTree.addChangeListener(
        new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            okCommand.setEnabled(variableTree.isSettable());
          }
        });

    JButton newCommand = new JButton(variableTree.getAddAction());
    JButton editCommand = new JButton(variableTree.getEditAction());
    JButton deleteCommand = new JButton(variableTree.getDeleteAction());

    okCommand = new JButton(App.messages.getString("res.3"));
    okCommand.setEnabled(false);

    JButton cancelCommand = new JButton(App.messages.getString("res.4"));

    JButton applyNull = new JButton(App.messages.getString("res.287"));

    applyNull.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            nullApply();
          }
        });

    newCommand.setPreferredSize(new Dimension(75, 25));
    editCommand.setPreferredSize(newCommand.getPreferredSize());
    deleteCommand.setPreferredSize(newCommand.getPreferredSize());
    okCommand.setPreferredSize(newCommand.getPreferredSize());
    cancelCommand.setPreferredSize(newCommand.getPreferredSize());
    applyNull.setPreferredSize(newCommand.getPreferredSize());
    okCommand.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            done();
          }
        });

    cancelCommand.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            hide();
          }
        });

    JPanel commandPanel = new JPanel(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridwidth = GridBagConstraints.REMAINDER;

    Component strut = Box.createVerticalStrut(150);

    commandPanel.add(strut, gbc);

    gbc.insets = new Insets(2, 20, 2, 20);

    commandPanel.add(newCommand, gbc);
    commandPanel.add(editCommand, gbc);
    commandPanel.add(deleteCommand, gbc);
    gbc.insets = new Insets(20, 20, 2, 20);
    commandPanel.add(okCommand, gbc);

    gbc.insets = new Insets(2, 20, 2, 20);

    commandPanel.add(applyNull, gbc);
    commandPanel.add(cancelCommand, gbc);

    wrapper.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 0));
    getContentPane().add(wrapper, BorderLayout.CENTER);
    getContentPane().add(commandPanel, BorderLayout.EAST);

    this.addWindowListener(
        new WindowAdapter() {
          public void windowOpened(WindowEvent e) {
            variableTree.scrollSelectedRowToVisible();
          }
        });
  }