Что делает данный код private string getbuttontext return driver gettext button
Я искал повсюду и не могу найти никого, кто мог бы решить эту проблему. Я делаю игру, и в этой игре у меня есть редактируемые элементы управления. Окно элементов управления представляет собой отдельный JFrame, и когда я нажимаю кнопку подтверждения, предполагается, что элементы в JTextFields (содержащие элементы управления) записываются в файл. но это не сработало, поэтому вместо этого я напечатал arrayylist, содержащий значения. вот код:
ИЗМЕНИТЬ 1:
Код для текстовых полей, а FILES. - это просто строка, хранящаяся в другом классе. класс setText() находится под текстовыми полями.
switchcase() только берет то, что вы написали в текстовом файле, из которого они получают значения, и переводит их. поэтому, если значение равно 0, оно превращается в пробел и т. д. io.readSpecificLine(); используется только для получения строки текста из файла. это помогает?
ИЗМЕНИТЬ 2: Я просто копался и обнаружил, что если я установил текст JTextField с помощью setText(""); , затем использовал getText(); , он работает. поэтому проблема в том, что когда я меняю его вручную и использую getText (); это не сработает. Почему?
Во-первых, вы должны изменить имя вашего метода "setText ()" на что-то вроде "getTextFromFile ()", оно будет более читабельным.
Затем, если вы устанавливаете и читаете новый текст в разных потоках, я уверен, что setText () требует много времени для возврата, потому что он обращается к файловой системе, в то время как метод, считывающий значения, запускается мгновенно.
Я бы попробовал провести небольшой тест:
Если test () печатает правильные значения, мы можем предположить, что если вы установите и прочитаете новое значение в том же потоке, оно будет работать нормально.
Другой тест, который я бы сделал:
Он будет печатать значение вверх каждую 1 секунду, чтобы вы могли видеть, получите ли вы через некоторое время новое значение. Если да, то ответ таков: ваш setText () долго запускается, и вы читаете значение до того, как будет установлено новое значение.
Вы можете попробовать следующее:
Создать класс Test.java
А затем в том месте, где вы используете метод " getText() .." сделайте следующее .
Если это сработает, то я считаю, что по какой-то причине JTextField не завершил «настройку» текста, и прежде, чем он завершится, был вызван getText (). У меня были подобные проблемы раньше, и тогда это решило мою проблему, но, тем не менее, это может быть не идеальное решение.
Это может показаться странным, но я думаю, что это проблема указателей. Если вы создадите новую строку перед ее передачей, JTextField сможет изменить ее внутри и вернуть то, что вы ожидаете, когда вас попросят изменить значение.
На вашем месте я бы попробовал отладить программу. Вы, вероятно, сделаете некоторую ошибку в своем коде, которую не сможете увидеть, просто проверив код.
Например, в каком порядке вы вызываете функции и так далее, может быть, у вас здесь ошибка, или, может быть, у вас несколько потоков, поэтому вы пытаетесь читать текстовые поля, даже не задавая их, и так далее . Трудно сказать без обзор всего Кодекса.
Netbeans или любая другая IDE также должна поддерживать отладку.
(1) Для текстовых полей свойство editable установлено на false.
(2) Вы создаете несколько копий JTextFields, затем редактируете новый на экране, но обращаетесь к старому, когда получаете значение.
(3) У вас есть обработчик событий ValueChanged или LostFocus, который сбрасывает текстовые поля до значений по умолчанию.
(4) На самом деле это JFormattedTextField, а не JTextField
Чтобы обновить текст до существующего в настоящее время JTextField, я бы установил JTextField как переменную класса и создал метод установки / получения для его настройки (что, как я предполагаю, вы делаете).
Привет!
Мои знания в создании какого-либо графического интерфейса до недавних пор были нулевыми. Поэтому было принято решение немного пошерстить просторы Интернета и сотворить какое-нибудь окошко с какими-нибудь кнопками, при нажатии которых будет что-то происходить. Возможно, в этом тексте кто-то найдет ответы на возникшие когда-то вопросы; в то же время я надеюсь на серьезную и грамотную критику.
Что будет происходить?
Так как цель у меня — разобраться с JavaFX, нужно придумать какую-то функцию у нашего окна. Идея такая: создадим набор людей (предположим, что они работают в какой-то компании), для каждого из которых будет известно имя, возраст, зарплата и семейное положение. Наше окно, во-первых, будет выводить информацию о каждом из них, во-вторых, изменять зарплату какого-либо сотрудника, в-третьих, иметь возможность добавлять нового сотрудника, и, наконец, в-четверных, будет способно фильтровать сотрудников в зависимости от значений их атрибутов. В результате должно получиться что-то по типу этого:
Начинаем
Перво-наперво создаем главный класс Company, откуда будет происходить запуск приложения:
В этом классе будем расширять возможности класса Application. Из него нам нужен главным образом метод start(), в котором будет происходить основное действие (будем пропускать ошибки, возникающие в этом методе; другими словами, если что-то пойдет не так, наше окно не закроется, но в консоли появится StackTrace ошибки):
Отлично. Для того, чтобы работать с представителями сотрудников компании, создадим класс User: объекты этого класса и будут выступать в роли сотрудников.
Создаем
Пока при запуске приложение у нас не происходит ничего. Чтобы появилось хотя бы окошечко, его необходимо добавить. Это и сделаем.
Что мы только что сделали: мы добавили сцену (scene) размером , дали ей название «Company». На нашей сцене присутствует группа root, которая по своей сути является «контейнером», который будет содержать в себе все кнопки.
Добавим выпадающий список с нашими сотрудниками. Создадим HBox, в который положим наш выпадающий список ComboBox userBox и кнопку, которая будет выдавать информацию о сотруднике (сам HBox поместим в VBox):
HBox — это набор кнопок, текстов, полей для ввода, каждый объект которого расположен последовательно горизонтально. Аналогичный ему, VBox является тем же самым, но хранит свои объекты (children) по вертикали. Мы будем использовать следующую схему: создатим VBox, в который будем класть несколько HBox'ов, в каждый из которых положим последовательность кнопок и полей.
ComboBox — это сам просто выпадающий список.
Теперь мы хотим создать кнопку, которая будет выдавать информацию о выбранном сотруднике. Добавим саму кнопку (Button) и текстовое поле (TextField), в которое будет выводиться текст. Эти два объекта добавим в HBox:
Но пока эта кнопка ничего не делает. Чтобы она что-то делала, необходимо ей присвоить действие:
Дальнейшие действия
Абсолютно аналогичным образом добавляем еще два HBox'а: во втором будет происходить изменение зарплаты, в третьем — добавляние нового сотрудника. В силу того, что логика здесь абсолютно та же самая, пропустим объяснения этих моментов и сразу покажем результат:
Фильтры
Теперь добавим «фильтрацию» сотрудников по признакам. Опять же, списки для фильтров будем добавлять с использованием ComboBox по той же самой логике.
Класс Company (главный)
Класс User
Что это было
Сама по себе программа не представляет никакой полезности и была написана исключительно для того, чтобы познакомиться с JavaFX и ее инструментами. В некотрых местах, например, при изменении зарплаты, не учитываются варианты, когда не выбран пользователь, или когда введена строка: в эти случаях будет появляться ошибка. То же самое касается полей, куда вводится информация при добавлении новых сотрудников. И, наконец, ошибка будет возникать, если не выбрано какое-то значение в любом из выпадающих списков. При желании, каждый может добавить свой «обход» этих моментов.
При написании фильтров, кстати, я использовал небезызвестные StreamAPI и -выражения, которые сокращают код, добавляют в него легкость понимания и свой шарм.
Цель лекции: Научиться использовать классы кнопок Juce в своих программах.
Кнопки представляют, пожалуй, одну из наиболее часто используемых групп виджетов. Базовым классом для них является Button , которому наследуют классы кнопки с текстом TextButton (пример ее использования рассматривался нами в "Разработка собственных компонентов" и многих последующих главах), кнопки со стрелкой ArrowButton , кнопок с изображениями ( ImageButton , DrawableButton и ShapeButton) , кнопки панели инструментов (ToolbarItemComponent) , а также ряд компонентов, которые имеют по своим функциям лишь косвенное отношение к кнопкам: гиперссылка (HyperlinkButton) , флажок (ToggleButton) , который рассматривался нами в "Компоненты ввода и отображения текстовой, цифровой и иерархической информации. Компоненты отображения состояния" и вкладка (TabBarButton) .
TextButton — это кнопка со стандартными (для Juce) формой и фоном и отображаемой на поверхности строкой текста. Кнопка TextButton может работать в двух режимах: простая управляющая кнопка (включено по умолчанию) и кнопка с фиксацией нажатого состояния. Для включения последнего режима необходимо вызвать метод void Button::setClickingTogglesState(bool shouldToggle) throw() с параметром true . Кроме того, возможно использование набора кнопок с фиксацией нажатого состояния, где в нажатом (on) состоянии может находиться одна и только одна кнопка. Для создания подобной группы используют методы void Button::setToggleState(bool shouldBeOn, bool sendChangeNotification) для задания режима фиксации и void Button::setRadioGroupId(int newGroupId) для включения кнопок в единую группу путем задания общего ID . Использование этих методов совершенно идентично таковому у ToggleButton "Компоненты ввода и отображения текстовой, цифровой и иерархической информации. Компоненты отображения состояния" .
Следует заметить, что, в отличие от других библиотек для построения графического интерфейса пользователя, в Juce кнопка в нажатом состоянии меняет только цвет фона . Цвета кнопки в нажатом (on) и отжатом (off) состоянии определяются значениями идентификаторов цвета перечислимого типа enum TextButton::ColourIds :
- buttonColourId — цвет фона кнопки в ненажатом состоянии;
- buttonOnColourId — цвет фона кнопки в нажатом состоянии;
- textColourOffId — цвет текста кнопки в ненажатом состоянии;
- textColourOnId — цвет текста кнопки в нажатом состоянии.
Задать необходимое значение цвета фона либо текста кнопки можно вызовом метода void Component::setColour(int colourId, const Colour & colour ) , передав в качестве параметра один из идентификаторов ColourIds .
Основное свойство с точки зрения внешнего вида кнопки с текстом — это, конечно же, надпись. Для работы с ней класс TextButton включает два метода, унаследованные от класса Button :
- void Button::setButtonText(const String& newText изменяет надпись на кнопке на newText
- const String Button::getButtonText() const — возвращает текст, отображаемый на кнопке.
Как правило, программист сам заботится о том, чтобы размеры кнопки и отображаемой ею надписи соответствовали друг другу. Однако в случае, если надпись на кнопке меняется в процессе выполнения программы, может возникнуть необходимость "подогнать" размеры кнопки под новый текст. В этом поможет метод void TextButton::changeWidthToFitText(int newHeight = -1) . В том случае, если значение newHeight больше нуля, то высота кнопки будет меняться таким образом, чтобы вместить новый текст, не превышая, однако, значения, заданного параметром. Если же оно меньше нуля, то высота кнопки меняться не будет, а будет меняться ее ширина. Рассмотрим использование метода на примере. Наше приложение будет включать два виджета: кнопку с надписью и поле ввода ( рис. 12.1).
Рис. 12.1. Программа, иллюстрирующая работу кнопки с текстом и изменяемой шириной
При нажатии на кнопку надпись последней будет меняться на текст в поле ввода при его наличии. При этом ширина кнопки будет меняться в зависимости от размеров новой надписи, а высота будет оставаться прежней пример 12.1
1- Android Button
В Android, Button это "контроль пользовательского интерфейса" (user interface control), который используется для выполнения действия, когда пользователь кликает (click) на него.
В иерархии классов, Button это подкласс у TextView, поэтому он наследует все свойства у TextView.
По умолчанию, при отображении содержания, текст у Button превратится в прописные буквы (uppercase), вам нужно настроить android:textAllCaps="false" чтобы удостовериться, что содержание отобразится как в оригинале.
Атрибут android:gravity используется для настройки отображения текста Button. Его значение это сочетание следующих значений:
Constant in Java | Value | Description |
Gravity.LEFT | left | |
Gravity.CENTER_HORIZONTAL | center_horizontal | |
Gravity.RIGHT | right | |
Gravity.TOP | top | |
Gravity.CENTER_VERTICAL | center_vertical | |
Gravity.BOTTOM | bottom | |
Gravity.START | start | |
Gravity.END | end | |
Gravity.CENTER | center | |
Android позволяет вам добавить 4 icon в один Button через атрибуты android:drawableLef, android:drawableTop, android:drawableRight, android:drawableBottom, android:drawableStart, android:drawableEnd.
Android 4.1 начинает поддерживать разницу в лэйауте текстов разных языков. Точнее в английском, текст написан слева на право, в то время как в арабском, текст написан справа на лево.
В режиме лэйаута LTR (Left to Right): Атрибут android:drawableStart будет работать как android:drawableLeft, и android:drawableEnd будет работать как android:drawableRight.
В режиме лэйаута RTL (Right to Left): Атрибут android:drawableStart будет работать как android:drawableRight, и android:drawableEnd будет работать как android:drawableStart.
2- Button Click Event
Событие Click (Клик) происходит когда пользователь нажимает (Press down) и отпускает (Release) Button.
Вы можете определить название метода, который будет вызван когда пользователь кликает (click) на Button используя атрибут android.onClick.
В то же время, создайте данный метод в классе MainActivity.
Вы так же можете определить метод, который будет вызван, когда пользователь кликает на Button, полностью с Java кодом:
3- Button Long Click Event
Событие Long Click (Длинный клик) в Android происходит когда пользователь нажимает (Press down) View и долго держит таким образом. Точнее, событие произойдет во время LONG_PRESS_TIMEOUT в милисекунду, когда пользователь нажиает(Press down). Вы можете получить значение LONG_PRESS_TIMEOUT из метода ViewConfiguration.getLongPressTimeout().
Продолжительность по умолчанию длинного клика (Long-Click) в Android это DEFAULT_LONG_PRESS_TIMEOUT милисекунды. Пользоваетль может поменять продолжительность длинного клика (Long-Click) в Settings (настройках) устройства, он будет применен ко всем приложениям в системе. Разработчики приложений не могут понять данное значение.
Например: Событие когда пользователь нажимает Long Click (Длинный клик) на Button с помощью Java кода(Заметьте, что вы не можете сделать это с XML).
Если пользователь кликает (click) на View на долгое время (Больше чем LONG_PRESS_TIMEOUT милисекунды), он может генерировать 2 последовательных события это Long-Click и Click.
Метод onLongClick(View) возвращает значение boolean. Если возвращает true, значит вы истратили событие Long-Click, и событие Click, которое происходит после, будет пропущено. Наоборот, если метод onLongClick(View) возвращает значение false, это значит событие Click, которое происходит потом будет выполнено.
4- Пример Android Button
Это простой пример, пользователь введет 2 числа и нажмет Button, чтобы посчитать сумму этих 2-х чисел.
Читайте также: