首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JCurses在不按"enter“键的情况下从键盘读取

使用JCurses在不按"enter“键的情况下从键盘读取
EN

Stack Overflow用户
提问于 2011-12-05 04:57:19
回答 2查看 3.9K关注 0票数 2

我正在编写一个应用程序,它要求我从控制台读取密钥,而不必等待用户按enter键。我读到过JCurses库可以提供帮助。

我尝试这样使用Toolkit.readCharacter()

代码语言:javascript
复制
InputChar c = Toolkit.readCharacter();
system.out.println(c.getCharacter());

但问题是,无论您输入多少个字符,readCharacter()方法都不会结束执行。即使您按enter键,它似乎仍在等待您输入一个字符。

我真的很感谢使用JCurses的任何帮助,或者任何其他方式都可以。

EN

回答 2

Stack Overflow用户

发布于 2013-06-21 13:31:43

Java Curses有几种特定的击键识别方法,但是将自己绑定到一个外部库来实现单个函数可能不是最好的解决方案。

可以通过创建终端风格的Swing应用程序并使用KeyListener来检测击键事件来实现您的目标。然而,MadProgrammer在How to make esc stop a method中指出,这样的解决方案可能会有“焦点问题”。

因此,如果您希望跟踪特定的击键,或者希望根据不同的用户输入影响程序行为,我建议您使用key bindings,它是作为Swing的一部分实现的。

例如:

代码语言:javascript
复制
component.getInputMap(WHEN_IN_FOCUSED_WINDOW).put
    (KeyStroke.getKeyStroke("F1"),"actionName");
component.getActionMap().put("actionName", yourAction);

其中,component是任何JComponent对象(假设是终端显示),而yourAction是任何Swing动作。对于“控制台”应用程序,最好使用这里所示的参数化形式的getInputMap(),因为用户必须在顶层窗口中进行击键,因此组件焦点是无关紧要的。

票数 0
EN

Stack Overflow用户

发布于 2017-06-10 23:07:14

这个程序对我很有效。

您需要调用Toolkit.init()将终端置于cbreak()模式。记得在退出之前调用Toolkit.shutdown()

有几个缺点。

  • jcurses自动将tty置于cbreak模式,并且jcurses不提供直接操作curses库的方法。
  • 一旦进入jcurses,输出就处于cbreak模式,java中的直接字符串有换行符,但没有回车符。jcurses的开发者
  • 只实现了拥有整个屏幕的诅咒的一部分。如果你想要的只是cbreak模式,那么jcurses就显得有些夸张了。

这个程序。

代码语言:javascript
复制
import jcurses.system.CharColor;
import jcurses.system.InputChar;
import jcurses.system.Toolkit;

public class itest 
{

    public static void main(String[] args) 
    {
        int y = 0;
        CharColor color = new CharColor(CharColor.BLACK, CharColor.WHITE);
        Toolkit.init();
        while (true) {
            InputChar c = Toolkit.readCharacter();
            if ('q' == c.getCharacter())
                break;
            Toolkit.printString(String.format("c : %c", c.getCharacter()), 0, y++, color);
        }
        Toolkit.shutdown();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8378530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档