我正在使用ComboBox和ChoiceBox控件,并且一直试图弄清楚在选择项目时执行操作的方法之间的区别。以下是什么区别?
ComboBox<String> comboBox =
new ComboBox(
FXCollections.observableArrayList(
"Hi",
"Hello",
"Test");
comboBox.getSelectionModel().selectedItemProperty().addListener(
(observable, oldValue, newValue) -> System.out.println(newValue));
comboBox.valueProperty().addListener(
(observable, oldValue, newValue) -> System.out.println(newValue));
comboBox.setOnAction(
event -> System.out.println(comboBox.getValue()));
ChoiceBox没有onAction属性,但它确实有其他属性,两者似乎都做同样的事情。建议哪个有什么区别?
我还想知道为ComboBox设置StringConverter或CellFactory是否更好;一个ChoiceBox需要使用StringConverter,但是我一直在使用setCellFactory(Callback<ListView<T>, ListCell<T>>)
方法来处理我的ComboBoxes(至少需要一个,因为内部标签将ImageView设置为图形)。
最后一件事 - 我的应用程序中有许多'refresh'方法,这些方法在执行动作时运行(例如,从ComboBox或ChoiceBox中选择一个项目)。改为使用绑定会更好吗?我不太确定这是否可行,因为我的代码没有使用包装值(properties / ObservableValue)。
我试过寻找这些问题的答案,但我还没有找到它。
答案 0 :(得分:1)
OnAction处理程序处理事件:这意味着您可以通过调用consume()来停止事件的传播。基于此事件的其他侦听器不会被调用(取决于它是EventHandler还是EventFilter,请参阅DOM 3事件模型,捕获和冒泡阶段之间存在差异)。
根据属性,你根本无法与听众轻松地做到这一点。
CellFactory还是StringConverter?他们的行为不一样,所以你应该决定什么对你最好。如果您不接触组件,也许最好只使用转换器?或者您可能只想在项目中使用一种技术来简化演变和维护?你决定了。
绑定还是手动刷新?取决于案件。您是希望始终进行同步更新还是只需要按需&#34;?绑定很棒,但是在两个更新之间添加行为可能变得很困难,有时候调试非常困难。 &#34;简单而非聪明&#34;应该适用。