Sądzę, że potrzebujesz dwóch komponentów tekstowych, pola tekstowego i pola tekstowego.
Jeśli użytkownik wprowadzi tekst w polu tekstowym na dole i wyświetli Wpisz, tekst zostanie przeniesiony do obszaru tekstowego, gdzie nie będzie już można go edytować. Następnie przetwarzanie odbywa się, ostatecznie wynik (lub wielokrotności) są drukowane w obszarze tekstowym, a następnie można wprowadzić kolejną linię.
Górny obszar może mieć JScrollPane
. W jakiś sposób należy obsłużyć buforowanie.
Oto proste, kompletne i runnable przykład:
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);
}
}
proszę zobaczyć http://stackoverflow.com/questions/1255373/create-a-command-console – krishnakumarp
to BeanShell wydaje się być po prostu rzeczą, która Szukałem, ale ten przykład nie działa poprawnie. –