如何从 JavaFX 中的 ChoiceBox 获取 observableArrayList 类型中的选定值
How to get selected value in observableArrayList type from ChoiceBox in JavaFX
这个问题类似于其他关于 JavaFX 中的 ChoiceBox 的问题,但我在我的代码中做了一些其他的事情。
我有 class 包含以下元素:
package application;
public class ControllerRegister extends Main implements Initializable {
@FXML
private ChoiceBox<String> cbSuppliers;
private ArrayList<String> suppliers = new ArrayList<String>();
public ControllerRegister() throws SQLException {/*....*/}
@FXML //controller method
void buttonOnAction2(ActionEvent event2) throws IOException, SQLException {
//push some button and then get value of choicebox
setStrTabDat()
/*....*/
}
public static void setStrTabDat(){ //my attempts to show selected value from ChoiceBox
ObservableList<String> outputOl = FXCollections.observableArrayList();
ChoiceBox<String> cbSuppliers = new ChoiceBox<String>();
outputOl = cbSuppliers.getItems();
outputOl.addAll(cbSuppliers.getValue());
String output = cbSuppliers.getValue();
System.out.println("output string: "+output);
System.out.println("output by method: " +cbSuppliers.getItems());
System.out.println("output observList: "+outputOl.toString());
}
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
ObservableList<String> list = FXCollections.observableArrayList(suppliers);
cbSuppliers.setItems(list);
cbSuppliers.getSelectionModel().selectFirst();
}
}
正如您在 setStrTabDat() 方法中看到的那样,我尝试从 ChoiceBox 打印选定的值,但是所有三个 Sytem.out.prints 的输出都是 'null'。我知道解决方案接近于我,所以请告诉我我应该怎么做..
也许你可以试试 THIS LINK。他们在这里解释:
- 如何创建 ChoiceBox();
- 如何使用一个
- 如何添加监听器
- 如何检索数据
基本上他们解释了你需要知道的一切。
祝你好运:)
此致,
迪米塔尔·格奥尔基耶夫
正确的解决方案是像这样在 initialize() 方法中添加到 ChoiceBox 侦听器:
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
ObservableList<String> list = FXCollections.observableArrayList(suppliers);
cbSuppliers.setItems(list);
cbSuppliers.getSelectionModel().selectFirst();
//and listener:
cbSuppliers.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
System.out.println(cbSuppliers.getItems().get((Integer) number2));
}
});
}
这个问题类似于其他关于 JavaFX 中的 ChoiceBox 的问题,但我在我的代码中做了一些其他的事情。 我有 class 包含以下元素:
package application;
public class ControllerRegister extends Main implements Initializable {
@FXML
private ChoiceBox<String> cbSuppliers;
private ArrayList<String> suppliers = new ArrayList<String>();
public ControllerRegister() throws SQLException {/*....*/}
@FXML //controller method
void buttonOnAction2(ActionEvent event2) throws IOException, SQLException {
//push some button and then get value of choicebox
setStrTabDat()
/*....*/
}
public static void setStrTabDat(){ //my attempts to show selected value from ChoiceBox
ObservableList<String> outputOl = FXCollections.observableArrayList();
ChoiceBox<String> cbSuppliers = new ChoiceBox<String>();
outputOl = cbSuppliers.getItems();
outputOl.addAll(cbSuppliers.getValue());
String output = cbSuppliers.getValue();
System.out.println("output string: "+output);
System.out.println("output by method: " +cbSuppliers.getItems());
System.out.println("output observList: "+outputOl.toString());
}
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
ObservableList<String> list = FXCollections.observableArrayList(suppliers);
cbSuppliers.setItems(list);
cbSuppliers.getSelectionModel().selectFirst();
}
}
正如您在 setStrTabDat() 方法中看到的那样,我尝试从 ChoiceBox 打印选定的值,但是所有三个 Sytem.out.prints 的输出都是 'null'。我知道解决方案接近于我,所以请告诉我我应该怎么做..
也许你可以试试 THIS LINK。他们在这里解释:
- 如何创建 ChoiceBox();
- 如何使用一个
- 如何添加监听器
- 如何检索数据
基本上他们解释了你需要知道的一切。
祝你好运:)
此致, 迪米塔尔·格奥尔基耶夫
正确的解决方案是像这样在 initialize() 方法中添加到 ChoiceBox 侦听器:
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
ObservableList<String> list = FXCollections.observableArrayList(suppliers);
cbSuppliers.setItems(list);
cbSuppliers.getSelectionModel().selectFirst();
//and listener:
cbSuppliers.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
System.out.println(cbSuppliers.getItems().get((Integer) number2));
}
});
}