Здравствуйте, есть ли возможность обращаться с одного jFrame к элементам другого jFrame?.
Если есть тогда к примеру у меня есть jFrame1 (в этом находится кнопка) и jFrame2 (в этом есть текстовое поле). Как реализовать что-бы при нажатии на кнопку в текстовом поле вывелось "Hello"?
Конечно, любой класс может обращаться к членам любого класса. Для этого методы и поля, к которым происходит обращение извне пакета, должны быть описаны с ключевым словом public
. Если классы находятся в одном пакете, то такие члены могут быть оставлены без указания области видимости (т. н. "default access level", уровень доступности по умолчанию, или по другому "package access"). Почитайте подробнее на https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html или в русскоязычной литературе о доступе к членам классов. По реализации взаимодействия между окнами есть более-менее общепринятые практики. Обычно с элементом, который должен реагировать на события системы (в вашем случае кнопка, реагирующая на нажатие) связывается т. наз. "слушатель" (listener) - это объект, в котором содержится метод, вызываемый системой при нажатии кнопки. Этот метод может установить текст в другой форме, если у соотв. элемента этой другой формы достаточный уровень доступности. Что-то типа такого:
...
Button button = new Button("Button"); // Создаете кнопку
button.addActionListener(buttonListener); // Привязываете слушатель
...
// отдельное поле - Слушатель - объект анонимного класса,
// производного от ActionListener
ActionListener buttonListener = new ActionListener() {
@Override // переопределяем метод, который будет вызван при нажатии кнопки,
// чтобы он делал, что нам надо
public void actionPerformed(ActionEvent e) {
jframe2.ourText.setText("Кнопка нажата"); // Устанавливаем текст во второй форме
}
}
Другая форма пр иэтом должна содержать такое описание:
public Text ourText = ...
Есть более изящные способы записать то же самое, но в такой форме (на мой взгляд) принцип виден наиболее отчетливо.
В большенстве случаев, однако, лучше бывает не делать публичными элементы формы, а сделать в ней специальные публичные методы для управления формой. Это позволит в будущем легче изменить дизайн формы и/или ее функциональность, не меняя всю остальную программу. Напр. так:
// Слушатель:
public void actionPerformed(ActionEvent e) {
jframe2.setImportantText("Кнопка нажата"); // Вызов метода
}
...
// Вторая форма:
private Text ourText = ... // Элемент недоступен извне
....
public void setImportantText(String text) { // Метод доступа (сеттер)
// Тут можно делать что-нибудь -- напр, проверить или изменить текст
ourText.setText(modifiedText);
// И можно сделать еще что-нибудь -- перевести на китайский и произнести вслух
}
Об этом подробнее можно прочитать тут https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html или в русской литературе про события и слушатели.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Работаю в Android StudioС помощью моей программы можно опубликовать пост в сообществе ВК
C Новым Годом) никак не могу понять как заполнить двумерный массив цифрами от 1 до 8 размерностью 8 на 8Кроме как заполнить его вручную
Здравствуйте, прошу Вас о помощи Очень короткий код на Java:
После добавления этих строк приложение перестало запускаться и телефон выдаёт что там угроза