[英]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.