Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 25.06.2017
Сообщений: 4

Ограничение на ввод данных в поле TextField с клавиатуры

25.06.2017, 12:48. Показов 7880. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возможно тема выеденного яйца не стоит, но решить ее у меня не получается. Написал простецкий калькулятор на java + javaFX, все вроде работает, да только не получается реализовать запрет пользователю вводить данные с клавиатуры (остановился, пока на таком кейсе). Если быть конкретнее, то данный запрет хочу реализовать в классе Controller, так вот в этом классе есть поле TextField которое связано с соответстующим полем в файле fxml.

Java
1
2
3
4
5
6
7
public class Controller {
 
    @FXML
    private TextField display;
 
//TODO something
}
вот часть кода ответственная за TextField в файле fxml.

XML
1
<TextField fx:id="display" ..... />
подскажите пожайлуйста, как их собрать в кучу, что бы можно было запретить ввод данных с клавиатуры. Заранее благодарен
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2017, 12:48
Ответы с готовыми решениями:

Ограничение на ввод символов в TextField
import java.awt.Checkbox; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; ...

Ограничение на ввод данных только в одно поле?
Можно ли поставить такое ограничение, чтоб можно было или оставить значение null во всех полях или при заполнении одного поля - заполнеть...

Ограничение на ввод данных в поле, используя функционал regexp-ов
Вроде плевая задача, но что-то не могу вкурить никак. В поле идентификатор пользователь может вводить любые указанные символы: a-zA-Z0-9. ...

4
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
27.06.2017, 23:11
в контроллере
Java
1
2
3
public void initialize() {
    display.setOnKeyTyped(Event::consume);
}
1
0 / 0 / 0
Регистрация: 25.06.2017
Сообщений: 4
28.06.2017, 17:49  [ТС]
Kadota спасибо, Ваш вариант вообще бомба. Я нашел несколько другое решение.
Для реализации ограничения вводимых пользователем данных с клавиатуры необходимо: написать класс который выполняет эту самую проверку и этот класс должен расширять класс TextField. Привожу мой класс в качестве примера

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.javaFX.calculator.validationOfData;  
 
import javafx.scene.control.TextField;
 
    public class CalcWindowTxtFld extends TextField {
 
        public CalcWindowTxtFld() {
        }
 
        @Override
        public void replaceText(int start, int end, String text) {
            if (text.matches("[ ]") || text.isEmpty()) {
                super.replaceText(start, end, text);
            }
        }
 
        @Override
        public void replaceSelection(String replacement) {
            super.replaceSelection(replacement);
        }
    }
Далее, переходим к фпайлу fxml прописываем импорт нашего класса Валидатора, вот так:

XML
1
<?import com.javaFX.calculator.validationOfData.CalcWindowTxtFld ?>
И заключительный шаг - меняем тип необходимого поля TextField на кастомный, в моем случае CalcWindowTxtFld. Должно получиться следующее. Было
XML
1
<TextField fx:id="display" styleClass="display" ......... >
стало
XML
1
<CalcWindowTxtFld fx:id="display"  styleClass="display" ......... >
Следеует заметить, что в Controller нет необходимости изменять тип поля с TextField на CalcWindowTxtFld. Играясь регулярками можно добиться необходимого результата.

В заключение хочется сказать, что оба варианта решения, Kadota и мой, не препятствуют копированию текста в поле TextField через меню либо комбинацию клавиш.
0
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
28.06.2017, 19:17
Цитата Сообщение от DenisDN Посмотреть сообщение
В заключение хочется сказать, что оба варианта решения, Kadota и мой, не препятствуют копированию текста в поле TextField через меню либо комбинацию клавиш.
Если это проблема, то
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package exp.dag;
 
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
 
public class TF extends Application {
 
    private FlowPane pane;
 
    private SimpleStringProperty fieldText;            // нажатие на кнопки будет изменять лишь его
 
    @Override
    public void init() throws Exception {
        fieldText = new SimpleStringProperty("");
        Button[] buttons = new Button[10];
        for (int i = 0; i < buttons.length; i++) {
            buttons[i] = new Button(String.valueOf(i));
            buttons[i].setOnAction(e -> fieldText.set(fieldText.get() + ((Button) e.getSource()).getText()));
        }
        TextField field = new TextField();
        field.setEditable(false);                             // не редактируемое поле
        field.textProperty().bind(fieldText);             // текст которого зависит только от fieldText
 
        pane = new FlowPane(5, 10);
        pane.getChildren().add(field);
        pane.getChildren().addAll(buttons);
    }
 
    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setScene(new Scene(pane, 150, 100));
        primaryStage.show();
    }
 
}
Еще подсказка: чтобы не реагировал на нажатие клавиш, в том числе Ctrl+V, можно было дописать
Java
1
2
3
4
public void initialize() {
    display.setOnKeyTyped(Event::consume);
    display.setOnKeyPressed(Event::consume);
}
1
0 / 0 / 0
Регистрация: 25.06.2017
Сообщений: 4
28.06.2017, 22:42  [ТС]
Спасибо за подсказку, но как таковой цели затрагивать это направление у меня не было (ограничивать ввод при помощи копирования), но информация нужная, по-этому отправилась в копилку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2017, 22:42
Помогаю со студенческими работами здесь

Добавить ограничение на ввод в числовое поле
Здравствуйте. Подскажите пожалуйста, возможно ли при создании таблицы на T-SQL создать такое поле (числовое), в которое можно ввести на...

Ограничение на ввод какой либо информации в поле Edit
А вот у меня вообще не получается реализовать ограничение на ввод какой либо информации в поле Edit c помощью KeyPress. Т.е. например для...

Ограничение на ввод дублера (уже существующей) записи в ПОЛЕ
Форумчане! Помогите создать процедуру, которая проверяет было ли такое (текстовое) значение уже введено в поле &quot;Чип_Обозн&quot; ...

Как задать ограничение на ввод только чисел в поле DBEdit?
Есть форма, на ней поле для ввода DBEdit. Надо сделать, чтобы юзер мог ввести только числа. Маску наложить, как я понял можно только в...

Как правильно заменить ввод данных простой на ввод с клавиатуры?
#include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru