public void actionPerformed(ActionEvent e) {
    if (e.getSource() == input) {
      String s = input.getText() + "\n";
      Utils.debugMsg(s);
      model.sendToBiocham(s); // .getBiochamInput().println(s);
      /*if (historyVector.size() > 31){
         historyVector.removeElementAt(0);
      }*/
      // historyVector.add(s);
      output.append(s);
      //  System.out.println("doc length= "+output.getDocument().getLength());
      //  output.setCaretPosition(output.getDocument().getLength());
      // scrollPane.setPreferredSize(new Dimension(200,200));
      input.setText(null);
      // historyIndex = -1;
    }

    output.setCaretPosition(output.getDocument().getLength());
  }
  /**
   * It constructs the commandline panel with its 3 text areas.
   *
   * @param p
   * @param m
   */
  private void buildPanel(DefaultMutableTreeNode p, BiochamModel m) { // Create the console Panel
    historyVector = new Vector<String>();
    historyIndex = -1;
    model = m;
    model.setHistoryIndex(historyIndex);
    model.setHistoryVector(historyVector);

    setLayout(new GridBagLayout());
    // setBackground(Utils.backgroundColor);
    GridBagConstraints c = new GridBagConstraints();
    setOpaque(true);

    c.gridx = 0;
    c.gridy = 0;
    JLabel l = new JLabel("Command: ");
    l.setBackground(Color.blue);
    add(l, c);

    input = new JTextField(80);

    input.addActionListener(this);
    // avoid TAB events consumption by FocusTraversal
    // keep them for command completion
    input.setFocusTraversalKeysEnabled(false);
    input.addKeyListener(
        new KeyAdapter() {
          public void keyPressed(KeyEvent e) {
            // History
            if (e.getKeyCode() == KeyEvent.VK_UP && !historyVector.isEmpty()) {
              if (historyIndex < 0) historyIndex = historyVector.size() - 1;
              else if (historyIndex > 0) historyIndex--;
              input.setText(historyVector.elementAt(historyIndex));
            }
            if (e.getKeyCode() == KeyEvent.VK_DOWN && historyIndex >= 0) {
              if (historyIndex < historyVector.size() - 1) {
                historyIndex++;
                input.setText(historyVector.elementAt(historyIndex));
              } else {
                historyIndex = -1;
                input.setText(null);
              }
            }
            // Command completion
            if (e.getKeyCode() == KeyEvent.VK_TAB) {
              input.setText(BiochamCommands.getContinuation(input.getText()));
            }
          }
        });

    c.gridx = 1;
    c.gridy = 0;
    c.fill = GridBagConstraints.HORIZONTAL;
    add(input, c);

    // Create a scrolled text area.
    output = new JTextArea(5, 30);
    /* output.setBackground(Color.black);
    output.setForeground(Color.white);*/
    output.setEditable(false);
    output.setFont(new Font("Monospaced", Font.PLAIN, 12));
    output.setWrapStyleWord(true);
    output.setLineWrap(true);
    output.setCaretPosition(output.getDocument().getLength());
    scrollPane = new JScrollPane(output);
    scrollPane.setAutoscrolls(true);
    // Add the text area to the panel.
    c.gridx = 0;
    c.gridy = 1;
    c.fill = GridBagConstraints.BOTH;
    c.gridwidth = 2;
    c.weightx = 1.0;
    c.weighty = 1.0;
    add(scrollPane, c);
    Utils.debugMsg(
        "******************************************doc length= "
            + output.getDocument().getLength());
  }
 /**
  * This method send a command to Biocham. It writes directely to the stream of communication with
  * Biocham.
  *
  * @param s The command as a String
  */
 public void sendCommandToBiocham(String s) {
   model.sendToBiocham(s, "cmdLine");
 }