Java fx组合框重置问题

时间:2014-03-06 05:59:07

标签: 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 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" >

3 个答案:

答案 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]