Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java fx组合框重置问题_Java_User Interface_Combobox_Javafx_Javafx 2 - Fatal编程技术网

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操作