powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему JComboBox не выбирает нужное мне значение? Потихоньку схожу с ума
6 сообщений из 6, страница 1 из 1
Почему JComboBox не выбирает нужное мне значение? Потихоньку схожу с ума
    #33782125
Neuling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо я не вижу какой-то элементарной вещи, но потратил уже целый день и ничего не понимаю. Сам вопрос простой, но чтобы полностью его обрисовать придеться вставить какое-то количество кода.

В общем так, у меня есть Панель в которой несколько JComboBox-ов. Привожу все существенные методы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
 public   class  GoalPanel  extends  JPanel  implements  ActionListener{
     private  Goal myGoal;
        public  GoalPanel(Goal g) {
         this .myGoal = g;               

         try  {
            jbInit();
            
            initComboBoxes(); 
            setInitFields();            
        }  catch  (Exception e) {
            e.printStackTrace();
        }
    }

 private   void  initComboBoxes() {
// у меня несколько боксов, но не важно, привожу инициализацию первого
        jCBActionField.addItem(ActionField.FINANCES);
        jCBActionField.addItem(ActionField.CUSTOMERS);
        jCBActionField.addItem(ActionField.PROCESSES);
        jCBActionField.addItem(ActionField.INNOVATION);  
}

//а вот и злосчастный метод
 private   void  setInitFields() {
         //этот объект создан просто для проверки
            Goal g1 =  new  Goal( 1 );
            g1.setActionField(ActionField.CUSTOMERS);

jCBActionField.setSelectedItem(g1.getActionField()); Так работает
//jCBActionField.setSelectedItem(myGoal.getActionField()); а так нет, непонятно почему????????????

//это вывод на экран для проверки. Здесь видно, что объект не пустой
System.out.println("myGoal.getActionField= " + myGoal.getActionField());
}

вот еще класс, который содержит данные (самое существенное)
 public   class  Goal  implements  java.io.Serializable {
	//Finanzen, Kunden etc.
	 private  ActionField actionField =  null ;

	 public  ActionField getActionField() {
		 return  actionField;
	}
}

ну а это класс, который создан для т.н. безопасного присвоения данных
 public   final   class  ActionField  implements  java.io.Serializable{
 private  String name;

 public   static   final  ActionField FINANCES  =   new  ActionField ("Finance");
 public   static   final  ActionField CUSTOMERS =  new  ActionField ("Customers");
...
}

Проблема:
если я пытаюсь присвоить моему Комбобоксу значения из объекта myGoal, то в результате в этом боксе имею ВСЕГДА выбранное ПЕРВОЕ значения из списка (в котором 4 различных значения), независимо от того, что на самом деле содержит мой объект.
Я мог бы с этим жить, если бы с инициализированным перед этим объектом (Goal g1 = new Goal(1)) тоже не срабатывало, так нет-работает нормально. Т.е. выбирает нужное мне значение (в данном случае 2-е из списка)

Так как вызов обеих методов (удачного и неудачного jCBActionField.setSelectedItem(ххх)) происходит в одном и том же месте можно подумать, что наверное мой объект myGoal просто неправильно инициализирован или равен нулю.
Но это не так, если я его тут же вывожу на экран, таким образом
Код: plaintext
System.out.println("myGoal.getActionField= " + myGoal.getActionField());

то вижу, что все нормально, у него одно из 4-х значений.

Кто-нибудь, пожалуйста объясните, почему это не работает, мне просто ОЧЕНЬ интересно. Я конечно мог бы это обойти, устанавливая комбобокс с помощью индекса, но уже после потраченного целого дня, просто хочется понять, в чем проблема.

Спасибо большое
...
Рейтинг: 0 / 0
Почему JComboBox не выбирает нужное мне значение? Потихоньку схожу с ума
    #33782190
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я, во-первых, не увидел myGoal.setActionField(ActionField.CUSTOMERS);
во-вторых в формах часто бывает глюк с конструктором предка - из него могут вызывться методы наследника при неинициализированных атрибутах;
и для порядка cледует определить ActionField.equals т.к. он используется комбой

не думаю, что помог.
...
Рейтинг: 0 / 0
Почему JComboBox не выбирает нужное мне значение? Потихоньку схожу с ума
    #33782211
MaxMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй определить для ActionField equals() и hashCode()
...
Рейтинг: 0 / 0
Почему JComboBox не выбирает нужное мне значение? Потихоньку схожу с ума
    #33784394
Neuling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exppя, во-первых, не увидел myGoal.setActionField(ActionField.CUSTOMERS);

ну этот аттрибут устанавливается где-то ранее, я сейчас не могу привести код. Но он установлен, как я уже говорил, я вывожу для контроля на экран и видно, что он не пустой.

exppво-вторых в формах часто бывает глюк с конструктором предка - из него могут вызывться методы наследника при неинициализированных атрибутах;
и для порядка cледует определить ActionField.equals т.к. он используется комбой
не думаю, что помог.
этот метод у меня уже определен
Код: plaintext
1.
2.
         public   boolean  equals(ActionField o) {
             return  o.name.equals( this .name);
        }
насчет конструктора предка, мало чего понял. Что ты имеешь в виду, констструктор панели или объекта Goal?

Для чего может понадобиться hashCode() и как ее определить?

Опять таки, допустим я что-то не определил. Но почему пред. строка работает, ведь речь идет об одном и том же классе (только разные объекты конечно)?
...
Рейтинг: 0 / 0
Почему JComboBox не выбирает нужное мне значение? Потихоньку схожу с ума
    #33784778
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторну этот аттрибут устанавливается где-то ранее, я сейчас не могу привести код. Но он установлен, как я уже говорил, я вывожу для контроля на экран и видно, что он не пустой.

вот это и надо продебужить и найти. а то подозрительно как-то
авторpublic boolean equals(ActionField o) {
return o.name.equals(this.name);
}
о па-па-па-па!!!
а чегой то у него аргумент такой. ничего вы не определили. перечетайте про правильное переопределение equals (рекомендую Хорстман Корнел). и ориентируйтесь на маркеры вашей IDE (на левой границе окна) (надеюсь у вас не FAR).
имел я ввиду конструктор панели (но случай это не ваш).

авторДля чего может понадобиться hashCode() и как ее определить?
нет. это такой синдром Javabrginner'ов в каждом классе создавать полный набор getter-setterов equals и hashCode.
equals нужен, т.к. исп-ся комбой для установления равентства элементов (сам дебужил)

помоему всё дело в myGoal. при отладке обратите внимание на callstack
...
Рейтинг: 0 / 0
Почему JComboBox не выбирает нужное мне значение? Потихоньку схожу с ума
    #33784959
Neuling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо expp!

вся проблема была в equals-методе.

я его переопределил таким образом:
Код: plaintext
1.
2.
3.
4.
         public   boolean  equals(Object o) {
             return  (o !=  null ) && ( o  instanceof  ActionField) &&
                    ((ActionField)o).name.equals( this .name) ;
        }

и все заработало. Да, я что-то совсем забыл, что параметр должен быть класса Object, в этом основная проблема.

Хотя все-таки непонятно, почему же этот комбобокс правильно понимал значение из только что созданного объекта (в примере Goal g1 = new Goal(1))

всем спасибо большое.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему JComboBox не выбирает нужное мне значение? Потихоньку схожу с ума
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]