Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/98: Рейтинг темы: голосов - 98, средняя оценка - 4.84
Почетный модератор
 Аватар для ildwine
6201 / 2955 / 1300
Регистрация: 04.03.2013
Сообщений: 5,796
Записей в блоге: 1

Как обратиться к объекту на форме JFrame из другого класса

04.03.2013, 12:55. Показов 18692. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Может быть вопрос, сто раз задавался, но я конкретного решения не нашел.

Главная форма создана через редактор среды NetBeans. Запуск программы осуществляется, соответственно созданием нового потока:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class Forma extends javax.swing.JFrame {
.......................................
public static void main(String args[]) {
        
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Forma().setVisible(true);
            }
        });
    }
}
Необходимо из другого класса, обращаться к компонентам на главной форме. Как обратиться? Ссылки-то на объект формы нет! А к классу напрямую обращаться нельзя.

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

Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2013, 12:55
Ответы с готовыми решениями:

Как сделать Jframe внутри другого JFrame
Доброго времени суток джентльмены и леди. Как сделать так, что бы внутри главного JFrame запустить несколько других...

Обращение к объекту из другого класса
JavaFX. У меня есть класс Controller и объект TextArea. Как мне изменить значение в TextArea из другого класса. Пробовал делать статической...

Как обратиться к объекту на форме из другого класса
Здравствуйте! Очень интересует вопрос... У меня есть нестатическая форма (обычная созданная студией), на ней располагаются какие-то...

8
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
04.03.2013, 13:12
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

Java
1
2
3
4
5
class Forma1 extends JFrame{
public Компонент1;
public Компонент2;
//и т.д.
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Forma extends javax.swing.JFrame {
//.......................................
public static void main(String args[]) {
        
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
               Forma1 forma1 = new Forma1();
               forma1.setVisible(true);
               forma1.Компонент1;
               forma1.Компонен2;//и т.д.
 
            }
        });
    }
}
Цитата Сообщение от ildwine Посмотреть сообщение
Ссылки-то на объект формы нет!
Цитата Сообщение от ildwine Посмотреть сообщение
Как обратиться?
только через духов или кофейную гущу
1
Почетный модератор
 Аватар для ildwine
6201 / 2955 / 1300
Регистрация: 04.03.2013
Сообщений: 5,796
Записей в блоге: 1
04.03.2013, 13:17  [ТС]
Спасибо, но тогда, насколько я понимаю, получается форму надо создавать руками. а не через визуальный дизайнер?
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
04.03.2013, 13:18
Цитата Сообщение от ildwine Посмотреть сообщение
Главная форма создана через редактор среды NetBeans.
Пока вы не сможете создавать форму в ручную и не выучите как все это взаимодействует друг с другом - забудьте о редакторе.
1
Почетный модератор
 Аватар для ildwine
6201 / 2955 / 1300
Регистрация: 04.03.2013
Сообщений: 5,796
Записей в блоге: 1
04.03.2013, 17:14  [ТС]
Спасибо!


И все равно я не могу понять следующее:
1. В унаследованном классе Forma1 мы объявляем только поля?
2. Если я создаю еще 1 класс скажем:
Java
1
2
3
class Test {
   .......
}
То как мне из тела класса Test ссылаться на переменные Forma1.компонент1;

Дело в том, что я же не могу все действия выполнять из метода run()... Нужно как то организовать модульность... Вот я и думал что создам дополнительный класс (ну в примере Test), в котором будут производиться всякие вычисления, а затем оттуда менять значения на форме. Или так сделать нельзя?

Добавлено через 33 минуты
Вернее forma1.Компонент1;
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
04.03.2013, 18:04
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

Для того что бы использовать что-то из одного класса в другом, надо:
1. что бы это что-то было доступно (public)
2. иметь экземпляр класса, к элементам которого вы пытаетесь обращаться
Например:
если вы хотите получать данные для текстового поля откуда то:
Java
1
2
3
4
5
6
7
8
9
10
class Data{
   public String getData(){
      return "Данные";
   }
}
class Form1 extends JFrame{
   //....
   Data data = new Data();//экземпляр класса
   JTextField field = new JTextField(data.getData());//используем метод другого класса
}
или наоборот, меняем текст где то:
Java
1
2
3
4
5
6
7
8
9
10
11
class Data{
   public void setData(JTextField field){
      field.setText("Данные");
   }
}
class Form1 extends JFrame{
   //.... 
   JTextField field = new JTextField();
   Data data = new Data();
   data.setData(field)
}
1
Почетный модератор
 Аватар для ildwine
6201 / 2955 / 1300
Регистрация: 04.03.2013
Сообщений: 5,796
Записей в блоге: 1
04.03.2013, 18:54  [ТС]
Вот теперь понял. спасибо большое!

Добавлено через 46 минут
Маленькое уточнение. То есть, как бы то ни было, я всё равно буду создавать объект вспомогательного класса в основном своём классе и вызывать его методы с параметрами, для достижения какой либо цели, но не смогу получить доступ к полям основного класса из вспомогательного никак иначе. То есть, не смогу вызвать в основном классе скажем void-метод вспомогательного (само собой создав экземпляр вспомогательного класса), который возьмет и выполнит кучу манипуляций с виджетами на основном классе-форме?
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
04.03.2013, 19:03
Цитата Сообщение от ildwine Посмотреть сообщение
То есть, не смогу вызвать в основном классе скажем void-метод вспомогательного
вызывайте что хотите, если оно доступно для вызова (public)
Цитата Сообщение от ildwine Посмотреть сообщение
но не смогу получить доступ к полям основного класса из вспомогательного никак иначе
передайте во вспомогательный класс экземпляр основного и делайте что надо
Java
1
2
3
4
5
class Data{
private Form1 form;
public Data(Form1 form){//конструктор
   this.form = form;//после этого, используйте поля и методы класса Form1 в классе Data
}
Но зачем этот винегрет?
1
Почетный модератор
 Аватар для ildwine
6201 / 2955 / 1300
Регистрация: 04.03.2013
Сообщений: 5,796
Записей в блоге: 1
04.03.2013, 19:07  [ТС]
Ну да согласен, что это скажем так "некошерно". Ну я, вроде бы, привел мысли в порядок. Спасибо вам, очень помогли прояснить прописные истины Java=))) Пусть на это и ушел день...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2013, 19:07
Помогаю со студенческими работами здесь

Как обратиться к форме другого класса
Как обратиться к форме другого класса, а именно показать ее пр нажатии кнопки из другой формы. Как делается это я знаю, но не знаю как и...

Как обратиться к объекту из другого метода
Есть две кнопки. Одна для создания контейнера, а другая для удаления этого контейнера. Когда создаю контейнер с помощью первой кнопки,...

Как обратиться к объекту формы из другого юнита?
В одном юните находится процедура procedure integral2 ; var x,y:integer ; h:real; begin x:=1; h:=10-x/9; for x :=...

Как обратиться к объекту другого окна в wpf
Есть окно MainWindow, в котором весь код. Второе окно LogWindow с единственным контролом TextBox, в котором выводится лог событий...

Как обратиться к объекту на другой форме?
В приложении созданы 2 формы. form1 и form2. причём form1 и form2 - это не имена объектов, а имена классов. объект form2 просто создать и...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru