从零开始创建简单的 Java 控制台界面






4.20/5 (3投票s)
用于测试 Java 代码的可轻松修改的类似控制台的界面
引言
使用 NetBeans 开发和测试新的 Java 代码可能会让人望而却步,因为输出窗口可能会迅速变得拥挤不堪,并且越来越难以阅读。大多数使用 C# 或 C++ 的开发人员发现,使用 Windows Form 对新代码进行初步测试会非常有帮助,并且通过快速揭示给定类的优缺点来加速开发。但是,使用纯 Java 找到一个简单的表单相当困难。这个项目演示了一种简单、灵活且易于修改的方法,用于在 Java 中创建类似控制台的窗口。
背景
在互联网上搜索“Java 控制台”时,令人惊讶的是,几乎找不到什么信息。我只能找到 一篇 CodeProject 文章 讨论这个问题,而且对于一个应该很简单的问题来说,这篇文章相当复杂。NetBeans 现在似乎是首选的 Java 应用程序开发 IDE。NetBeans 使用 STDIN
、STDOUT
和 STDERR
流,但不拥有显示流的控制台实例。这些不包括清除屏幕的支持。我已经使用了这个简单的类似 Java 的控制台窗口,它克服了这些限制,同时允许继续使用 NetBeans 输出窗口。
Using the Code
本文中使用的 Java 控制台窗口演示了数学表达式解析器的测试。但你可以使用任何你选择的应用程序并将其连接到控制台。要构建控制台,请在 NetBeans 中按照以下步骤操作
- 新建项目 -> Java -> 应用程序
- 保持 Main 未选中
- 将新的 Other->Swing JavaForm 添加到项目中
- 注意:简单地添加新的 JForm 可能不起作用
- 将 Swing TextArea 拖到设计视图上
- 注意:不要使用 AWT TextArea - 它将无法工作
- 从 '
jTextArea1
' Properties -> Events -> 添加 'jTextArea1keypressed
' 事件 - 在
initComponents
下添加 'this.setLocationRelativeTo(null);
' 以居中窗口。 - 根据需要,在
initComponents
下添加标题文本 - 在
jTextArea
Properties -> 设置字体、前景色和背景色
控制台窗口的模拟是通过首先添加 jTextArea1KeyPressed
事件来实现的。小心不要将此事件添加到 Console
本身,这将不起作用。大部分繁重的工作都在这个事件中完成
private void jTextArea1KeyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) { // Enter was pressed. Your code goes here.
String[] lines = jTextArea1.getText().split("\\n");
int nline = lines.length;
String sCommand = lines[nline - 1];
sCommand = sCommand.replaceAll("<< ", "");
System.out.println("sCommand =: |" + sCommand + "|");
if (sCommand.equals("quit")) {
quitFlag = true;
appendString("Are you sure (yes/no)?\n");
// finalizing code goes here return;
}
if(sCommand.equals("Yes") || sCommand.equals("yes") || sCommand.equals("y")) {
if(quitFlag) {
System.out.println("User confirmed quit");
Path p = Paths.get("./data/varmap.dat");
varmap.writeMap(p);
System.exit(0);
}
}
if(sCommand.equals("No") || sCommand.equals("no") ||
sCommand.equals("n")) { if(quitFlag) {
System.out.println("User cancelled quit");
quitFlag = false;
jTextArea1.append("\n\n<< ");
return;
}
if (sCommand.equals("cls")) {
int nlineCount = jTextArea1.getLineCount();
System.out.println("nlineCount =: " + nlineCount);
sCommand = sCommand.replaceAll("<< ", "");
jTextArea1.setText("");
jTextArea1.selectAll();
jTextArea1.append("<< ");
return;
}
...
// None of the above so process the command here
String sMessage = "Processing '" + sCommand + "'\n";
appendString(sMessage);
... or wire in your own desired test class here
如果你想使用 NetBeans 编译和运行源代码,请下载并解压缩源文件,consolesrc.zip,将其复制到你的 NetBeansProjects 目录,启动 NetBeans,选择 Open Project -> ConsoleDemo,然后选择 Run->Build and Run (重建 dist/jar 文件夹),然后运行该项目。
关注点
我发现控制台窗口对开发和调试各种数学表达式解析器非常有帮助。在这个演示中,我使用了 Java 递归下降解析器 (RDP) 的一个版本 ,取自这里。我添加了一个变量存储和检索映射类 JVarMap
,java 和一个预扫描器,JPreScan.java。后者是必需的,因为 RDP 仅评估数值表达式。因此,预扫描会将任何存储的变量转换为它们各自的数值,并将它们替换为要评估的表达式。内置于解析器中的错误处理使查找错误变得更容易,尤其是与 NetBeans IDE Output 结合使用时。
历史
- 2017年5月18日:版本 1.0.0.0