[英]Reading from keyboard without pressing “enter” using JCurses
我正在編寫一個應用程序,要求我從控制台讀取鍵,而不必等待用戶按下Enter鍵。 我讀過JCurses庫可以提供幫助。
我嘗試像這樣使用Toolkit.readCharacter()
:
InputChar c = Toolkit.readCharacter();
system.out.println(c.getCharacter());
但是問題是無論您輸入多少字符, readCharacter()
方法都不會結束執行。 即使您按Enter鍵,似乎仍在等待您輸入字符。
對於使用JCurses的任何幫助或其他任何方式,我都非常感謝。
Java Curses有幾種特定的按鍵識別方法,但是將您自己綁定到單個函數的外部庫可能不是最佳解決方案。
通過創建終端樣式的Swing應用程序並使用KeyListener
來檢測擊鍵事件,可以實現目標。 但是,MadProgrammer在“ 如何使esc停止”方法中指出,這種解決方案可能會出現“焦點問題”。
因此,如果您想跟蹤特定的擊鍵,或希望基於不同的用戶輸入來影響程序行為,我建議您使用作為Swing的一部分實現的鍵綁定 。
例如
component.getInputMap(WHEN_IN_FOCUSED_WINDOW).put
(KeyStroke.getKeyStroke("F1"),"actionName");
component.getActionMap().put("actionName", yourAction);
其中component是任何JComponent
對象(可能是終端顯示),而yourAction
是任何Swing操作。 對於“控制台”應用程序,最好使用此處所示的getInputMap()
的參數化形式,因為用戶必須在頂級窗口內進行擊鍵,因此組件焦點無關緊要。
這個程序對我有用。
您需要調用Toolkit.init()將終端置於cbreak()模式。 並記得在退出前調用Toolkit.shutdown() 。
有幾個缺點。
該程序。
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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.