初始化线程时,我正在使用从sql数据库获取的项目填充comboBox。
如果有人感兴趣:
rl
我有一部分代码向sql表添加了一个新值,并且我想在出现这种情况时重新填充comboBox。
如果我这样做:
public void initialize(URL arg0, ResourceBundle arg1) {
if(arr != null || arr.length > 0) {
for(int i = 0; i<arr.length; i++) {
cmBox.getItems().add(arr[i]);
}
}
}
它工作正常,但是除非关闭并重新打开显示comboBox的窗口,否则我看不到新更改。
没有错误或其他任何东西,只是在寻找新颖的方法来重新加载comboBox并使其真正显示更新后的值,而无需手动关闭并重新打开窗口。
答案 0 :(得分:0)
当您向“ sql表中添加新值”时,您不需要运行刷新按钮comboBox.setItems(...)
,这将更新组合框,此处为示例
public class Main extends Application {
private int[] data;
private int dataCount = 0;
@Override
public void start(Stage primaryStage) throws Exception{
data = randomizeData(dataCount);
ComboBox comboBox = new ComboBox();
comboBox.setItems(FXCollections.observableArrayList(
Arrays.stream(data).boxed().collect(Collectors.toList())));
Button updateDataButton = new Button("Update values in SQL Table");
updateDataButton.setOnAction(event -> {
//Update your SQL data
updateData();
//Refresh List
comboBox.setItems(FXCollections.observableArrayList(
Arrays.stream(data).boxed().collect(Collectors.toList())));
});
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
vBox.getChildren().addAll(comboBox, updateDataButton);
Scene scene = new Scene(vBox);
primaryStage.setScene(scene);
primaryStage.show();
}
private int[] randomizeData(int additional){
int[] data = new int[5+additional];
for (int i = 0; i < data.length; i++) {
data[i] = (int) (Math.random()*10);
}
return data;
}
private void updateData(){
data = randomizeData(++dataCount);
}
public static void main(String[] args) { launch(args); }
}