Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.139.240.142] |
|
Сообщ.
#1
,
|
|
|
Добрый день! Не давно стал изучать java и натолкнулся на такой вопрос.
public class JFrame extends javax.swing.JFrame { public void combobox(int i, String sh){ jComboBox1.addItem("sh"); System.out.println(sh); } public class EniseyJV { public static List<PcapIf> alldevs = new ArrayList<PcapIf>(); public static StringBuilder errbuf = new StringBuilder(); public static JFrame frm = new JFrame(); public static void InitPcap(){ int r = Pcap.findAllDevs(alldevs, errbuf); if (r == Pcap.NOT_OK || alldevs.isEmpty()) { System.err.printf("Can't read list of devices, error is %s", errbuf.toString()); return; } int i = 0; for (PcapIf device : alldevs) { String description = (device.getDescription() != null) ? device.getDescription() : "No description available"; frm.combobox(5, "device.getName()");// description); } } public static void main(String[] args) { // TODO code application logic here eniseyjv.JFrame.main(args); InitPcap(); } есть 2 класса один JFrame а другой EniseyJV, в отдельных файлах. Как на яве обращаются к JFrame который имеет combobox. Из моего кода я обращаюсь к функции которая находится в JFrame, я к ней обращаюсь но ничего не происходит в combobox. Подскажите как правильно обращаться к виджетам. Спасибо |
Сообщ.
#2
,
|
|
|
Пожалуйста, вставьте код с объявлением пакетов (если они есть) и импортов. Так будет проще запустить Ваш проект и найти ошибку.
|
Сообщ.
#3
,
|
|
|
Только закоментируете библиотеки pcap. Спасибо.
Прикреплённый файлEniseyJV.7z (13,49 Кбайт, скачиваний: 108) |
Сообщ.
#4
,
|
|
|
Ох, у Вас там (а так же в голове, похоже, уж извините) каша.
Класс eniseyjv.JFrame -- типовая форма, сгенерированная визуальным редактором. (Я не противник их использования при условии, что есть понимание сгенерированного кода.) Он содержит готовый метод main, который вы вызываете из другого, написанного самостоятельно -- допустимо, если нужно просто показать окно. А теперь что происходит на самом деле. Главная строка в методе eniseyjv.JFrame.main (его редактор IDE по умолчанию сворачивает, но заглянуть внутрь полезно): new JFrame().setVisible(true); -- создание и отображение новой формы на экране. Немного выше находится настройка скина для Swing. В классе EniseyJV Вы создаёте новый экземпляр класса eniseyjv.JFrame в статической переменной, но к тому, с которым работает метод eniseyjv.JFrame.main он никак не относится. Наконец, в классе eniseyjv.JFrame зачем-то объявлена ещё одна статическая переменная, к которой Вы обращаетесь в методе combobox(int,String); вместо того, чтобы работать с текущим объектом. В общем, вот работающий вариант. Прикреплённый файлEniseyJV.7z (13,81 Кбайт, скачиваний: 112) Отличие в том, что создаётся только один экземпляр JFrame и над ним производятся все действия. |
Сообщ.
#5
,
|
|
|
Большое спасибо очень доступно объяснили, теперь все понятно.
И еще один вопрос функция setSkin что она выполняет в програме и если я захочу еще к одной форме обратиться, нужно будет писать что наподобие функции setSkin. Спасибо. |
Сообщ.
#6
,
|
|
|
Подгружает настройки кастомного внешнего вида для Swing (в случае ошибки выводит сообщение, сохраняя работоспособность программы). Закомментируйте её вызов -- увидете, как Swing выглядит по умолчанию.
Код полностью скопирован из метода main, сгенерированного NetBeans-ом. Поскольку там используются только статические методы -- судя по всему, достаточно выполнить его только один раз. UPD: то есть, используются статические методы для управления внешним видом Swing. У самого скина вызываются и обычные. И, самое главное, ссылки на форму не фигурируют вообще. |
Сообщ.
#7
,
|
|
|
Все теперь понятно, большое спасибо за то что потрудились объяснить
|