从零开始创建简单的 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下添加标题文本
- 在 jTextAreaProperties -> 设置字体、前景色和背景色
控制台窗口的模拟是通过首先添加 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


