JTextField getText () не работает
Я искал повсюду и не могу найти никого, кто мог бы решить эту проблему. Я делаю игру, и в этой игре у меня есть редактируемые элементы управления. Окно элементов управления представляет собой отдельный JFrame, и когда я нажимаю кнопку подтверждения, предполагается, что элементы в JTextFields (содержащие элементы управления) записываются в файл. но это не сработало, поэтому вместо этого я напечатал arrayylist, содержащий значения. вот код:
Проблема в следующем: если я изменю окончательное поле JTextField attack или любое другое, если на то пошло, и нажму «Отправить», система распечатает элементы управления по умолчанию. например, если JTextFields имеют значения w, a, s, d, r, t, q и i, изменяют значение q на i, он выводит q. Что я делаю не так? заранее спасибо!
ИЗМЕНИТЬ 1:
Код для текстовых полей, а FILES. — это просто строка, хранящаяся в другом классе. класс setText() находится под текстовыми полями.
switchcase() только берет то, что вы написали в текстовом файле, из которого они получают значения, и переводит их. поэтому, если значение равно 0, оно превращается в пробел и т. д. io.readSpecificLine(); используется только для получения строки текста из файла. это помогает?
ИЗМЕНИТЬ 2: Я просто копался и обнаружил, что если я установил текст JTextField с помощью setText(«»); , затем использовал getText(); , он работает. поэтому проблема в том, что когда я меняю его вручную и использую getText (); это не сработает. Почему?
8 ответов
РЕШЕНИЕ ни один из приведенных выше ответов не помог мне, поэтому я, наконец, решил просто начать с этого класса. Несколько вещей, которые я изменил, касались того, как я сделал JTextFields. Я сделал их массивом, а не отдельными объектами. Во-вторых, как я выражаю то, что они говорят. Когда я их инициализировал, мне не удалось заставить их создать С текстом в параметрах. так что мне пришлось делать это отдельно. Я изменил некоторые имена методов, чтобы избежать путаницы в будущем, и это сработало! так что я не уверен, что с этим было, может быть, я сделал это так, может быть, просто счастливой случайностью. такое случается иногда, так что прошу прощения за задержку и трату вашего времени! в любом случае спасибо за все ответы!
Во-первых, вы должны изменить имя вашего метода «setText ()» на что-то вроде «getTextFromFile ()», оно будет более читабельным.
Затем, если вы устанавливаете и читаете новый текст в разных потоках, я уверен, что setText () требует много времени для возврата, потому что он обращается к файловой системе, в то время как метод, считывающий значения, запускается мгновенно.
Я бы попробовал провести небольшой тест:
Если test () печатает правильные значения, мы можем предположить, что если вы установите и прочитаете новое значение в том же потоке, оно будет работать нормально.
Другой тест, который я бы сделал:
Он будет печатать значение вверх каждую 1 секунду, чтобы вы могли видеть, получите ли вы через некоторое время новое значение. Если да, то ответ таков: ваш setText () долго запускается, и вы читаете значение до того, как будет установлено новое значение.
Вы можете попробовать следующее:
Создать класс Test.java
А затем в том месте, где вы используете метод » getText() ..» сделайте следующее .
Если это сработает, то я считаю, что по какой-то причине JTextField не завершил «настройку» текста, и прежде, чем он завершится, был вызван getText (). У меня были подобные проблемы раньше, и тогда это решило мою проблему, но, тем не менее, это может быть не идеальное решение.
Это может показаться странным, но я думаю, что это проблема указателей. Если вы создадите новую строку перед ее передачей, JTextField сможет изменить ее внутри и вернуть то, что вы ожидаете, когда вас попросят изменить значение.
На вашем месте я бы попробовал отладить программу. Вы, вероятно, сделаете некоторую ошибку в своем коде, которую не сможете увидеть, просто проверив код.
Например, в каком порядке вы вызываете функции и так далее, может быть, у вас здесь ошибка, или, может быть, у вас несколько потоков, поэтому вы пытаетесь читать текстовые поля, даже не задавая их, и так далее . Трудно сказать без обзор всего Кодекса.
Итак, если вы используете eclipse, вы можете перейти по этой ссылке для объяснения того, как отлаживать: http: / /www.vogella.com/articles/EclipseDebugging/article.html
Netbeans или любая другая IDE также должна поддерживать отладку.
(1) Для текстовых полей свойство editable установлено на false.
(2) Вы создаете несколько копий JTextFields, затем редактируете новый на экране, но обращаетесь к старому, когда получаете значение.
(3) У вас есть обработчик событий ValueChanged или LostFocus, который сбрасывает текстовые поля до значений по умолчанию.
(4) На самом деле это JFormattedTextField, а не JTextField
Чтобы обновить текст до существующего в настоящее время JTextField, я бы установил JTextField как переменную класса и создал метод установки / получения для его настройки (что, как я предполагаю, вы делаете).
В соответствии с вашими методами вы должны использовать что-то вроде:
Изменить: ** Первый setText — это JTextField.setText, второй setText — ваш публичный метод, который вы опубликовали. Я предполагаю, что ваш второй getText () не работает, потому что вы, вероятно, неправильно устанавливаете текст.
Не видя большего количества кода, я не могу дать лучшего предположения.
Источник
Как работает getText() в java
Узнал, что можно в JFrame заменить Scanner на getText() , но не знаю как он работает.
К примеру мне надо, чтобы в int d; записывалось значение написанное в моём JTextField burl .
2 ответа 2
Вот вам пример использования этой функции, считывание данных String из блока TextField. Акшоны можете проставить любые от конечного заполнения символа, до нажатия кнопки, чтобы параметр был записан в label_text, используйте уже его от туда.
Да, все верно, вы можете заменить на getText() — считывает строку из jTextField и преобразовывает её в числовой формат:
Пример её использования при нажатии на кнопку JButton click :
Всё ещё ищете ответ? Посмотрите другие вопросы с метками java или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.18.40487
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник