Некоторые функции и код не вызываются в методе инициализации в JavaFx
Я попытался создать приложение JavaFX. В контроллере не вызывается некоторая функция в методе инициализации.
Например:
@Override
public void initialize(URL location, ResourceBundle resources) {
txt_name.requestFocus();
btn_update.setVisible(false);
btn_delete.setVisible(false);
chk_active.setSelected(true);
clear();
listner_txtbx();
setTable();
Populate_Table();
}
В приведенном выше коде код выбора CheckBox и метод Populate_table не вызываются, а вызываются все остальные методы и коды.
Это файл контроллера
public class BrandController implements Initializable {
public TextField txt_id;
public TextField txt_name;
public TextField txt_remarks;
public Button btn_save;
public Button btn_update;
public Button btn_delete;
public Button btn_clear;
public CheckBox chk_active;
public TableView tbl_brand;
public TableColumn col_slno;
public TableColumn col_id;
public TableColumn col_name;
public TableColumn col_remarks;
public TableColumn col_status;
public Button btn_Close;
private Stage stage_brand;
ObservableList<obj_Brand> tblData = FXCollections.observableArrayList();
DBMysql db = new DBMysql();
@Override
public void initialize(URL location, ResourceBundle resources) {
txt_name.requestFocus();
btn_update.setVisible(false);
btn_delete.setVisible(false);
chk_active.setSelected(true);
clear();
listner_txtbx();
setTable();
Populate_Table();
}
private void clear(){
txt_name.clear();
txt_remarks.clear();
setCode();
txt_name.requestFocus();
}
private void Populate_Table(){
System.out.println("inside table");
tblData.clear();
int status;
if(chk_active.isSelected()){status=1;}else{status=0;}
try {
Statement st = db.con.createStatement();
System.out.println("select * from " + db.schema + ".tbl_brand where status =" +status+ "");
ResultSet rs = st.executeQuery("select * from " + db.schema + ".tbl_brand where status =" +status+ "");
while (rs.next()) {
tblData.add(new obj_BrandBuilder().setCode(rs.getString("code")).setName(rs.getString("name")).setRemarks(rs.getString("remarks")).setStatus(rs.getString("status")).createObj_Brand());
}
st.close();
} catch (SQLException ex) {
Logger.getLogger(BrandController.class.getName()).log(Level.SEVERE, null, ex);
}
}
Я попробовал метод Populate_Table, используя метод Button On Action, и код работает, но он не вызывается в методе инициализации.
Как я могу это исправить?
1 ответ
Предисловие
Поместите system.outs в свой метод и проверьте, действительно ли они не выполняются. Я думаю, что их казнят.
Решение
Initialize вызывается после завершения создания контроллера. Ваша сцена еще не отображается.
Введите свой кодPlatform.runLater()
, это отложит выполнение в будущем.
Если это не помогло, установите размер сцены на «+1», а после этого еще раз на «-1» (по ширине и высоте). Это запускает рендерер.
Если это снова не сработает, опубликуйте рабочий минимальный пример вашего кода.