Как сделать поле ввода в java

Обновлено: 05.07.2024

Для того чтобы пользователь мог что-то ввести с клавиатуры, существует стандартный поток ввода, представленный объектом System.in. Рассмотрим, как это происходит.

Для ввода данных с клавиатуры в Java используется метод System.in.read() - он возвращает код введенного символа. После его выполнения JVM останавливает программу и ждет, пока пользователь введет символ с клавиатуры. Для того чтобы вывести сам символ на консоль, выполняется его приведение к типу char :

Методы этого класса позволяют считывать строку, значение типа int или double .

Методы класса Scanner :

hasNextInt() - возвращает true если с потока ввода можно считать целое число.

nextInt() - считывает целое число с потока ввода.

hasNextDouble() - проверяет, можно ли считать с потока ввода вещественное число типа double .

nextDouble() - считывает вещественное число с потока ввода.

nextLine() - позволяет считывать целую последовательность символов, то есть строку.

hasNext() - проверяет, а остались ли в потоке ввода какие-то символы.

В следующем примере метод hasNextInt() проверяет, ввел ли пользователь целое число. И с помощью метода nextInt() считываем введенное число. Если пользователь ввел строку, то программа выведет на консоль "Вы ввели не целое число":

Рассмотрим пример, в котором используется метод nextDouble() для считывания дробного числа. Если же пользователь введет строку, то программа завершится с ошибкой времени выполнения. Чтобы этого не происходило, перед вызовом метода nextDouble() , сделайте проверку с помощью метода hasNextDouble() :

В Java используются два основных способа ввода данных с клавиатуры:

С помощью метода readLine() объекта, порожденного от класса BufferdReader из пакета java.io.

С помощью nextLine() и других методов объекта, созданного от класса Scanner из пакета java.util.

Однако в обоих случаях изначально используется System.in – объект класса InputStream, присвоенный переменной in, находящейся в классе System пакета java.lang. Данный объект выполняет функцию стандартного потока ввода, т. е. ввода с клавиатуры. (В то время как System.out – стандартный поток вывода.)

В Java объект System.in обеспечивает низкоуровневый ввод, при котором методом read() считываются байты. Например, если ввести "ab" и нажать Enter, будет прочитано три байта. В десятичном представлении значение первого байта будет соответствовать символу "a" по таблице символов, второго – символу "b", третьего – символу перехода на новую строку.

Если же ввести букву национального алфавита, которая не может кодироваться одним байтом, то каждый ее составляющий байт будет прочитан по отдельности.

Для преобразования байтов в символы, а затем в строки полученное от System.in передают в конструкторы классов-оберток. Обертки используют функционал переданного им объекта, но дополняют его своим.

Первая обертка – класс InputStreamReader, который преобразует набор байтов в символ. Класс BufferedReader буферизует ввод, обеспечивая считывание из потока ввода (клавиатура это или файл – не важно) целых строк, что делает процесс более быстрым.

Выражение BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); есть сокращенная запись от:

В случае Scanner дело обстоит попроще, так как класс может больше:

У сканера есть методы, проверяющие тип вводимых данных (hasNextInt() и т. п.). Несмотря на удобство Scanner, если надо просто считывать строки без их анализа, предпочитают использовать BufferedReader, так как он работает быстрее. В остальном выбор зависит от специфики задачи.

как создать сайт на wordpress, настроить и оптимизировать wordpress

Итак, для ввода информации с консоли надо сделать:
1. предварительно импортировать класс Scanner

2. создать объект класс Scanner. При создании объекта класса Scanner используется объект in класса System

Если здесь не все понятно не огорчайтесь, все станет намного яснее позже, пока просто запомните

3. Переменной а, типа int присваивается значение. Значение получают при помощи метода nextInt(), который прописан в классе Scanner

Пока просто запомните

4. Необходимо закрыть объект sc

Таким образом, общий код программы выглядит так:

Чтобы получить введенное число, используется метод sc.nextInt(), который возвращает введенное с клавиатуры целочисленное значение.

В классе Scanner имеются еще ряд методов, которые позволяют получать не только целочисленные значения для int переменных. Есть методы, которые позволяют получать значения для других типов переменных. Некоторые из них представлены ниже:

Я знаю, что об этом много раз спрашивали и отвечали, но я все еще не могу получить ответ, который мне действительно нужен. Надеюсь, на этот раз кто-нибудь сможет мне помочь, и заранее благодарю вас. :)

Это то, что я хочу в своей программе, я хочу, чтобы пользователь ограничивал ввод только числами. Всякий раз, когда они вводят буквы и другие буквы, появляется подсказка. Я могу это сделать, есть подсказка для букв и других символов, но введенное значение все еще остается, я хочу, чтобы оно было очищено.

Пожалуйста, смотрите мой код.

Хотя я очищаю свое текстовое поле, вводимый мной символ все равно отображается. Любая помощь приветствуется. Спасибо! :)

2 ответа

Вам необходимо создать подкласс класса DocumentFilter и использовать регулярное выражение для сопоставления каждой вставленной строки / символа, если они являются цифрами или нет, и выполнять соответствующие действия.

Ниже приведен полностью рабочий пример кода этой работы. Благодаря @camickr за указание на использование DocumentFilter более актуально, чем старый способ расширения JTextField для достижения того же результата.

Добавьте строку evt.consume() в код, как показано ниже:

Чтобы отключить также вставку неправильного ввода в текстовое поле txtQty1 , вы можете использовать событие caretUpdate , как показано ниже:

Примечание. если вы используете форму графического интерфейса Netbeans, просто создайте событие caretUpdate.

Читайте также: