簡體   English   中英

Java fx組合框重置問題

[英]Java fx combobox reset issue

當我嘗試使用以下代碼清除組合框時:

代碼:

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" >

單擊按鈕事件后,使用此代碼重新設置組合框。

對於Eg。

yourresetbutton.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(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

當然,此時第二個組合框中沒有任何項目。

這完全符合ComboBox的Javadocs。 特別是, onAction處理程序文檔描述了處理程序,如下所示:

ComboBox操作,每當更改ComboBox值屬性時調用。 這可能是由於當用戶選擇彈出列表或對話框中的項目時,以編程方式更改了value屬性,或者,在可編輯的ComboBoxes的情況下,可能是用戶提供自己的輸入時(通過TextField)或其他一些輸入機制。

我使用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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM