在JavaFX应用程序中,我希望根据我在另一个类中实现的一些工作逻辑来更新状态栏。
我无法弄清楚如何结合我的意愿,将工作逻辑传递给方法(而不是将其写在任务中)并了解工作进度百分比。
这是带有Task的控制器的示例:
public class FXMLDocumentController implements Initializable {
@FXML private Label label;
@FXML ProgressBar progressBar;
@FXML
private void handleButtonAction(ActionEvent event) {
Service<Void> myService = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
try {
DatabaseFunctionality.performWorkOnDb();
//updateProgress(1, 1);
} catch (InterruptedException ex) {
Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
};
}
};
progressBar.progressProperty().bind(myService.progressProperty());
myService.restart();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
Run Code Online (Sandbox Code Playgroud)
这是帮助程序类: …
我有一个ComboBox,我正在填充Sheet对象值.
我设置了一个Cell Factory,以便在下拉列表中显示工作表的名称.它工作正常(似乎是这样).
问题是在选择项目("单元格")后,框中显示的值不是列表中显示的值.
这是相关的代码部分:
excelFile = new ExcelFile(file);
//ObservableList<String> sheets = FXCollections.observableArrayList(excelFile.getSheetsNames());
ObservableList<Sheet> sheets = FXCollections.observableArrayList(excelFile.getSheets());
sheetsBox.setItems(sheets);
sheetsBox.setDisable(false);
sheetsBox.setCellFactory(new Callback<ListView<Sheet>, ListCell<Sheet>>() {
@Override
public ListCell<Sheet> call(ListView<Sheet> param) {
return new ListCell<Sheet>() {
@Override
protected void updateItem(Sheet item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
} else {
setText(item.getSheetName());
}
}
};
}
});
Run Code Online (Sandbox Code Playgroud)