Java fx组合框重置问题
当我尝试使用以下代码清除组合框时: 代码:Java fx组合框重置问题,java,user-interface,combobox,javafx,javafx-2,Java,User Interface,Combobox,Javafx,Javafx 2,当我尝试使用以下代码清除组合框时: 代码: public class ComboController implements Initializable { @FXML ComboBox firstcombobox=new ComboBox(); @FXML ComboBox secondcombobox=new ComboBox(); @Override public void initialize(URL arg0, ResourceBundle arg1) { // TODO Au
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" >
点击按钮事件后,使用此代码重置组合框 例如
yourresetbutton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
firstcombobox.getSelectionModel().clearSelection();
firstcombobox.getItems().clear();
secondcombobox.getSelectionModel().clearSelection();
secondcombobox.getItems().clear();
}
});
yourresetbutton.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent t){
firstcombobox.getSelectionModel().clearSelection();
firstcombobox.getItems().clear();
secondcombobox.getSelectionModel().clearSelection();
secondcombobox.getItems().clear();
}
});
选中此项可重置组合框
谢谢。输出正是您应该期望的 首先,在第二个组合框中选择一些内容。这将调用第二个组合框的处理程序,给出输出
seccde
my name is vinay
然后在第一个组合框中选择一个项目。这将调用第一个组合框的处理程序。该组合框的处理程序首先清除第二个组合框中的所有项,其副作用是将第二个组合框的value属性设置为null。这将导致调用第二个组合框的操作处理程序,生成输出
null
my name is vinay
firabc
然后,第二个组合框的处理程序生成输出
null
my name is vinay
firabc
当然,在这一点上,第二个组合框将没有任何项目
这与组合框的Javadocs是一致的。特别是,下面将描述处理程序:
ComboBox操作,每当ComboBox值
属性已更改。这可能是由于正在使用value属性
当用户在弹出窗口中选择项目时,以编程方式更改
列表或对话框,或者在可编辑组合框的情况下,可能是
用户提供自己的输入(可以是通过文本字段或其他方式)
其他输入机制
我使用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");
}
}
}
你想要什么?它工作得很好!!我正在进行数据库搜索。当我试图清除这些组合框时,它会自动调用其关联的操作,导致空poiner错误,因为我已删除该搜索条件。请先显示整个代码!!SecondComboxAction()不应该被调用但如何调用这两个方法?您的FXML文件在哪里?先生,首先将值设置为第二个combobox,不要在第一个combobox中选择值,然后尝试在第一个combobox操作中重置其值。它会自动调用第二个combobox操作