创建一个“命令"安慰
我有一个不寻常的问题:如何使用 Swing 创建命令控制台"?
I have a bit of an unusual question: How can I create a "Command Console" using Swing?
我想要的是一个控制台,用户在其中输入命令,按回车,命令的输出显示在下面.我不想让用户更改提示"和较旧的输出.我正在考虑类似 Windows CMD.EXE 的东西.
What I want to have is a console where the users type in commands, press enter, and the output from the command is displayed under. I don't want to allow the user to change the "prompt" and older output. I am thinking of something like Windows CMD.EXE.
我查看了 this 问题,但没有回答我的问题.
I had a look at this question, however it doesn't answer my question.
推荐答案
BeanShell提供了一个JConsole,一个命令行输入控制台,具有以下特点:
BeanShell provides a JConsole, a command line input console with the following features:
- 闪烁的光标
- 命令历史记录
- 剪切/复制/粘贴,包括使用 CTRL+箭头键进行选择
- 命令完成
- Unicode 字符输入
- 彩色文本输出
- ...所有内容都包含在滚动窗格中.
BeanShell JAR 可从 http://www.beanshell.org/download.html 源代码可通过 SVN 从 svn co http://ikayzo.org/svn/beanshell
The BeanShell JARs are available from http://www.beanshell.org/download.html and the source is available via SVN from svn co http://ikayzo.org/svn/beanshell
有关 JConsole 的更多信息,请参阅 http://www.beanshell.org/manual/jconsole.html
For more info on JConsole see http://www.beanshell.org/manual/jconsole.html
这是在您的应用程序中使用 BeanShell 的 JConsole 的示例:
Here is an example of using BeanShell's JConsole in your application:
import java.awt.Color;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import javax.swing.JFrame;
import bsh.util.GUIConsoleInterface;
import bsh.util.JConsole;
/**
* Example of using the BeanShell project's JConsole in
* your own application.
*
* JConsole is a command line input console that has support
* for command history, cut/copy/paste, a blinking cursor,
* command completion, Unicode character input, coloured text
* output and comes wrapped in a scroll pane.
*
* For more info, see http://www.beanshell.org/manual/jconsole.html
*
* @author tukushan
*/
public class JConsoleExample {
public static void main(String[] args) {
//define a frame and add a console to it
JFrame frame = new JFrame("JConsole example");
JConsole console = new JConsole();
frame.getContentPane().add(console);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,400);
frame.setVisible(true);
inputLoop(console, "JCE (type 'quit' to exit): ");
System.exit(0);
}
/**
* Print prompt and echos commands entered via the JConsole
*
* @param console a GUIConsoleInterface which in addition to
* basic input and output also provides coloured text
* output and name completion
* @param prompt text to display before each input line
*/
private static void inputLoop(GUIConsoleInterface console, String prompt) {
Reader input = console.getIn();
BufferedReader bufInput = new BufferedReader(input);
String newline = System.getProperty("line.separator");
console.print(prompt, Color.BLUE);
String line;
try {
while ((line = bufInput.readLine()) != null) {
console.print("You typed: " + line + newline, Color.ORANGE);
// try to sync up the console
//System.out.flush();
//System.err.flush();
//Thread.yield(); // this helps a little
if (line.equals("quit")) break;
console.print(prompt, Color.BLUE);
}
bufInput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:JConsole 返回;"如果您自己按 Enter.
NB: JConsole returns ";" if you hit Enter by itself.
相关文章