Supongo que necesita dos componentes de texto, un área de texto y un campo de texto.
Si el usuario ingresa texto en el campo de texto en la parte inferior, y toca Ingrese, el texto se mueve al área de texto, donde ya no se puede editar. Luego se procesa, eventualmente se imprime un resultado (o múltiplos) en el área de texto, y se puede ingresar la siguiente línea.
El área superior podría tener un JScrollPane
. De alguna manera, el almacenamiento en memoria intermedia debe ser manejado.
Aquí es un simple, completa y ejecutable ejemplo:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.plaf.ActionMapUIResource;
/**
CmdPrompt
@author Stefan Wagner
@date Mi 25. Apr 17:27:19 CEST 2012
(c) GPLv3
*/
public class CmdPrompt extends JFrame
{
private static final String progname = "CmdPrompt 0.1";
private JTextField input;
private JTextArea history;
public CmdPrompt()
{
super (progname);
JPanel mainpanel = new JPanel();
mainpanel.setLayout (new BorderLayout());
this.getContentPane().add (mainpanel);
input = new JTextField (80);
history = new JTextArea();
mainpanel.add (history, BorderLayout.CENTER);
mainpanel.add (input, BorderLayout.SOUTH);
ActionMap actionMap = new ActionMapUIResource();
actionMap.put ("enter", new AbstractAction() {
@Override
public void actionPerformed (ActionEvent e) {
String cmd = input.getText();
String sofar = history.getText();
history.setText (sofar + "\n> " + cmd + "\n" + processCmd (cmd));
input.setText ("");
}
});
InputMap keyMap = new ComponentInputMap (input);
keyMap.put (KeyStroke.getKeyStroke (KeyEvent.VK_ENTER, 0), "enter");
SwingUtilities.replaceUIActionMap (input, actionMap);
SwingUtilities.replaceUIInputMap (input, JComponent.WHEN_IN_FOCUSED_WINDOW, keyMap);
setSize (400, 400);
setLocation (100, 100);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setVisible (true);
}
private void center()
{
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screen = tk.getScreenSize();
Dimension d = getSize();
setLocation ((screen.width - d.width)/2, (screen.height - d.height)/2);
}
public static String processCmd (String cmd)
{
String arr [] = cmd.split (" ");
if ("rev".equals (arr [0])) {
return reverse (cmd.substring (4));
}
else if ("upp".equals (arr [0])) {
return (cmd.substring (4)).toUpperCase();
}
else if ("low".equals (arr [0])) {
return (cmd.substring (4)).toLowerCase();
}
else if ("help".equals (arr [0])) {
return ("rev, upp, low, help");
}
return "unknown command";
}
public static String reverse (String cmd)
{
return (cmd.length() < 2) ? cmd : reverse (cmd.substring (1)) + cmd.charAt (0);
}
public static void main (final String args [])
{
Runnable runner = new Runnable()
{
public void run()
{
new CmdPrompt();
}
};
EventQueue.invokeLater (runner);
}
}
consulte http://stackoverflow.com/questions/1255373/create-a-command-console – krishnakumarp
este BeanShell parece ser cosa sólo que Estaba buscando, pero el ejemplo allí no parece funcionar correctamente. –