Tôi đoán bạn cần hai thành phần văn bản, một vùng văn bản và một trường văn bản.
Nếu người dùng nhập văn bản vào trường văn bản ở dưới cùng và chạm Nhập, văn bản sẽ được chuyển vào vùng văn bản, nơi văn bản không thể chỉnh sửa được nữa. Sau đó quá trình xử lý diễn ra, cuối cùng một kết quả (hoặc bội số) được in đến vùng văn bản, và dòng tiếp theo có thể được nhập vào.
Khu vực phía trên có thể có JScrollPane
. Bằng cách nào đó, bộ đệm phải được xử lý.
Đây là một đơn giản, đầy đủ và Runnable dụ:
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);
}
}
Nguồn
2012-04-25 11:23:12
xin vui lòng xem http://stackoverflow.com/questions/1255373/create-a-command-console – krishnakumarp
BeanShell này có vẻ là chỉ điều mà Tôi đã theo đuổi, nhưng ví dụ có vẻ như không hoạt động đúng. –