/** * Reads a line of text edited by the user, terminated by <code>ENTER</code>. Editing is performed * at the current cursor position. * * @param field Maximum length of the text * @return The text read. <code>null</code> if it was pressed the <code>Esc</code> key. */ public static String nextLine(int field) { boolean oldCursorOn = frame.isCursorOn(); boolean oldEcho = frame.isEcho(); cursor(false); int lin = frame.getLin(), col = frame.getCol(); for (int i = 0; i < field; ++i) print(' '); cursor(lin, col); cursor(true); echo(false); StringBuffer res = new StringBuffer(field); char c; while ((c = waitChar(0)) != '\n') { if (c == KeyEvent.VK_ESCAPE) { res = null; break; } // Esc (27) else if (c == KeyEvent.VK_BACK_SPACE) { // Backspace (8) if (res.length() == 0) continue; res.deleteCharAt(res.length() - 1); cursor(false); cursor(frame.getLin(), frame.getCol() - 1); print(' '); cursor(frame.getLin(), frame.getCol() - 1); cursor(true); } else if (res.length() < field) { print(c); res.append(c); } } cursor(oldCursorOn); echo(oldEcho); return res == null ? null : res.toString(); }