Я работаю над проектом для моего образования, который управляет начальной школой. я пытаюсь установить пользовательский интерфейс с javaFX, и я также использую базу данных SQLite.
Проблема заключается в том, что когда я устанавливаю два поля со списком, одно для уровня cb_nv
, а другое cb_nb
для номера класса на выбранном уровне. cb_nv
инициализирован и работает нормально, второй ComboBox должен принимать значение lvl
, возвращенное из cb_nv
, и должен отображать только классы, существующие в BD. вот мой подход:
@FXML
ComboBox<String> cb_nb, cb_nv;
int lvl=1;
int nb=1;
ObservableList<String> optionslvl=FXCollections.observableArrayList("A","B","C","D");
ObservableList<String> optionsnb=bdClss.getNBListByLvl(lvl);
...
cb_nv.setItems(optionslvl);
cb_nv.setValue("A");
cb_nb.setItems(optionsnb);
cb_nb.setValue("1");
список успешно получен от BD и отображается в cb_nb
(lvl=1) без проблем, но когда я меняю cb_nv
на "B", я все еще получаю "A" классный список. вот часть кода, которая должна внести изменения:
cb_nv.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
nb=1;
cb_nb.setValue("1");
if(cb_nv.getItems().get((Integer) number2)=="A"){
lvl=0;
cb_nb.getItems().clear();
cb_nb.setItems(bdClss.getNBListByLvl(lvl));}
else if(cb_nv.getItems().get((Integer) number2)=="B"){
lvl=1;
cb_nb.getItems().clear();
cb_nb.setItems(bdClss.getNBListByLvl(lvl));}
else if(cb_nv.getItems().get((Integer) number2)=="C"){
lvl=2;
cb_nb.getItems().clear();
cb_nb.setItems(bdClss.getNBListByLvl(lvl));}
else if(cb_nv.getItems().get((Integer) number2)=="D"){
lvl=3;
cb_nb.getItems().clear();
cb_nb.setItems(bdClss.getNBListByLvl(lvl));}
else{System.err.println("Erreur lors de changement de class..");}
}
});
cb_nb.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
if(cb_nb.getItems().get((Integer) number2)=="1"){nb=1;}
else if(cb_nb.getItems().get((Integer) number2)=="2"){nb=2;}
else if(cb_nb.getItems().get((Integer) number2)=="3"){nb=3;}
else if(cb_nb.getItems().get((Integer) number2)=="4"){nb=4;}
else if(cb_nb.getItems().get((Integer) number2)=="5"){nb=5;}
else if(cb_nb.getItems().get((Integer) number2)=="6"){nb=6;}
else if(cb_nb.getItems().get((Integer) number2)=="7"){nb=7;}
else if(cb_nb.getItems().get((Integer) number2)=="8"){nb=8;}
else if(cb_nb.getItems().get((Integer) number2)=="9"){nb=9;}
else{System.err.println("Erreur lors de changement de class..");}
}
});
мне нужно возвращенное значение nb
в конце. Но пользователь не должен выбирать класс не существует, потому что далее программа будет искать его в BD. мне нужно исправить cb_nb
, чтобы показать только правильный выбор..
ИЗМЕНИТЬ:
Первая проблема решена, теперь показывает правильный вариант, но Exception появляется каждый раз при переходе с уровня с классами на другой пустой.. и if()
переходит в финальный else{}
до упора!
Erreur lors de changement de class..
Exception in thread "JavaFX Application Thread" java.lang.ArrayIndexOutOfBoundsException
Любое предложение поможет. Должен ли я подумать об изменении всего подхода, потому что он слишком неправильный. Спасибо.
==
. Используйте методequals
. - person VGR   schedule 16.10.2015