Некоторые функции и код не вызываются в методе инициализации в 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» (по ширине и высоте). Это запускает рендерер.

Если это снова не сработает, опубликуйте рабочий минимальный пример вашего кода.

Другие вопросы по тегам