我有一个不寻常的问题:如何使用Swing创建“命令控制台”?
我想要的是用户键入命令的控制台,按enter键,并显示命令的输出.我不想允许用户更改“提示”和旧的输出.我在想像Windows CMD.EXE这样的东西.
我看了一个this的问题,但是它并没有回答我的问题.
解决方法
BeanShell提供了一个JConsole,一个命令行输入控制台,具有以下功能:
>闪烁的光标
>命令历史
>剪切/复制/粘贴,包括使用CTRL箭头键选择
>命令完成
> Unicode字符输入
>彩色文本输出
> …它都包裹在滚动窗格中.
BeanShell JAR可从http://www.beanshell.org/download.html获得,源可以通过SVN从svn co http://ikayzo.org/svn/beanshell
有关JConsole的更多信息,请参阅http://www.beanshell.org/manual/jconsole.html
以下是在您的应用程序中使用BeanShell的JConsole的示例:
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键.