Хорошо, я работаю над довольно большой программой.JCombo + переопределить toString
Я постараюсь поставить только то, что вам нужно.
Так прямо сейчас, comboBox
заполняет (с переопределением toString
), и выбирается первый элемент.
Когда я выбираю разные параметры и меняю содержимое comboBox
, новый список помещается в comboBox
, и первый элемент выбирается снова.
Я могу видеть обновление, поэтому я знаю, что он правильно заполняется.
Проблема что когда я выбираю что-либо в comboBox
, ничего не происходит.
Первый элемент остается выбранным, ни одна из моих линий System.out.println
не печатает, поэтому ничего не выполняется.
Когда я удаляю переопределение toString
, все работает по назначению.
Странная часть, прошлое, когда имея это переопределение toString
удаляется, он падает обратно на родительский класс, который имеет переопределение toString
.
Что происходит?
Насколько я понимаю, toString
буквально изменяет то, что отображается, оно не меняет данные.
Я добавляю объекты в comboBox
, но отображаю немного информации.
public class Belt extends Part{
//variable initialization and methods
@override
public String toString(){
String display = this.getCode() + " - " + this.color;
return display;
}
public final class Something implements ActionListener{
//variable initialization and methods
//there are several methods that call the fillBeltCombo()
GridBagConstraints c = new GridBagConstraints();
private void pad(GridBagConstraints c){
c.anchor = GridBagConstraints.NORTHWEST;
c.weightx = 1;
c.insets.left = 10;
c.insets.right = 10;
c.insets.top = 5;
c.insets.bottom = 5;
}
beltCombo = new JComboBox();
beltCombo.setVisible(true);
c.gridwidth = 2;
c.gridx = 4;
c.gridy = 9;
beltCombo.addActionListener((ActionEvent eventBelt) -> {
JComboBox beltCodeCombo1 = (JComboBox) eventBelt.getSource();
if(beltCombo.getItemCount()>0){
currentProduct.setBelt((Belt)beltCodeCombo1.getSelectedItem());
}else{/*do nothing*/}
});
pane.add(beltCombo, c);
public static void fillBeltCombo(ArrayList<Belt> list){
beltCombo.removeAllItems();
int size = list.size();
for(int x=0; x<size; x++){
beltCombo.addItem(list.get(x));
}
}
}
Что такое 'c' выше? Как в 'c.gridwidth = 2;'. Кроме того, каждый раз, когда вызывается инициатор действия, вы создаете новый поле со списком. Возможно, это причина, по которой вы не видите обновления существующего поля со списком. Был ли новый блок со списком умышленным? – markspace
@ markspace Добавил мои GridBagConstraints в код, чтобы показать, что такое 'c'. Что касается создания нового comboBox каждый раз при вызове слушателя, я не помню его аргументации. Я выбрал это где-то на этих форумах при реализации ActionListener. Так что да, это было намеренно (и это работает на моих comboBoxes, у которых нет другого переопределения toString), но я не могу защитить, почему я его использую. Просто стала привычкой. – brentb
Итак, теперь вопрос в том, когда вы говорите «когда я выбираю что-нибудь в comboBox, ничего не происходит», в котором вы ссылаетесь? Для каждого клика у вас будет одна коробка combox. – markspace