当我尝试使用以下代码清除组合框时:
代码:
public class ComboController implements Initializable
{
@FXML
ComboBox firstcombobox=new ComboBox();
@FXML
ComboBox secondcombobox=new ComboBox();
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
// TODO Auto-generated method stub
firstcombobox.getItems().add("firabc");
firstcombobox.getItems().add("firbcd");
secondcombobox.getItems().add("seccde");
secondcombobox.getItems().add("secdef");
}
@FXML
public void firstcomboboxAction()
{
secondcombobox.getSelectionModel().clearSelection();
secondcombobox.getItems().clear();
System.out.println(firstcombobox.getSelectionModel().getSelectedItem());
}
public void secondcomboboxAction()
{
System.out.println(secondcombobox.getSelectionModel().getSelectedItem());
System.out.println("my name is vinay");
}
}
它会自动调用动作事件
首先我从第二个组合框中选择了“seccde” 然后我从第一个组合框中选择了“firabc”
我收到的输出是:
seccde
my name is vinay
null
my name is vinay
firabc
但应该是:
seccde
my name is vinay
firabc [with an empty firstcombobox]
Fxml:
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="application.ComboController">
<ComboBox fx:id="firstcombobox" onAction="#firstcomboboxAction" >
<ComboBox fx:id="secondcombobox" onAction="#secondcomboboxAction" >
答案 0 :(得分:1)
单击按钮事件后,使用此代码重置组合框。
对于例如。
yourresetbutton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
firstcombobox.getSelectionModel().clearSelection();
firstcombobox.getItems().clear();
secondcombobox.getSelectionModel().clearSelection();
secondcombobox.getItems().clear();
}
});
使用此选项重置组合框。
谢谢..
答案 1 :(得分:1)
输出正是您应该期待的。
首先在第二个组合框中选择一些内容。这将调用第二个组合框的处理程序,给出输出
seccde
my name is vinay
然后在第一个组合框中选择一个项目。这将调用第一个组合框的处理程序。该组合框的处理程序首先清除第二个组合框中的所有项,作为副作用将第二个组合框的value属性设置为null。这会导致调用第二个组合框的动作处理程序,生成输出
null
my name is vinay
然后第二个组合框的处理程序生成输出
firabc
当然,此时第二个组合框中没有任何项目。
这完全符合ComboBox的Javadocs。特别是,docs for the onAction handler描述了处理程序如下:
ComboBox操作,每当ComboBox值调用时 财产改变了。这可能是由于价值属性所致 当用户选择弹出窗口中的项目时,以编程方式更改 列表或对话框,或者,在可编辑的ComboBoxes的情况下,它可能是何时 用户提供自己的输入(通过TextField或一些 其他输入机制。
答案 2 :(得分:1)
我使用changeListener解决了这个问题。
public class ComboController implements Initializable
{
@FXML
ComboBox firstcombobox=new ComboBox();
@FXML
ComboBox secondcombobox=new ComboBox();
@Override
public void initialize(URL arg0, ResourceBundle arg1)
{
// adding elements to comboboxes
firstcombobox.getItems().add("firabc");
firstcombobox.getItems().add("firbcd");
secondcombobox.getItems().add("seccde");
secondcombobox.getItems().add("secdef");
// adding action to first combobox
firstcombobox.getSelectionModel().selectedItemProperty()
.addListener(new firstcomboboxAction());
// adding action to second combobox
secondcombobox.getSelectionModel().selectedItemProperty()
.addListener(new secondcomboboxAction());
}
class firstcomboboxAction implements ChangeListener<String>
{
@Override
public void changed(ObservableValue<? extends String> observable,String oldValue, String newValue) {
if(newValue!=null)
{
secondcombobox.getSelectionModel().clearSelection();
secondcombobox.getItems().clear();
System.out.println(firstcombobox.getSelectionModel().getSelectedItem());
}
}
class secondcomboboxAction implements ChangeListener<String>
{
@Override
public void changed(ObservableValue<? extends String> observable,String oldValue, String newValue)
{
System.out.println(secondcombobox.getSelectionModel().getSelectedItem());
System.out.println("my name is vinay");
}
}
}
FXML:
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"
fx:controller="application.ComboController">
<ComboBox fx:id="firstcombobox" >
<ComboBox fx:id="secondcombobox" >
输出:
seccde
my name is vinay
firabc [with an empty firstcombobox]