JavaFX:ComboBox单元格在单击时消失

问题描述 投票:0回答:1

我正在使用javafx多种输入类型在java项目上工作,但由于我对图像使用Label,所以我遇到了勒索ComboBox行为( ImageView)。

1-组合框显示为white!但我需要黑色。

enter image description here

2-和每次i选择一个项目

enter image description hereenter image description here

3- 它消失了!!

enter image description hereenter image description here

这是我的代码:

...    
import javafx.scene.control.ComboBox;
import javafx.scene.image.ImageView;

ImageView img_tun = new ImageView("images/icones/flag/Tunisia.png");
Label lbl_tun=new Label("1",img_tun);        
ImageView img_fr = new ImageView("images/icones/flag/France.png");
Label lbl_fr=new Label("2",img_fr);        
ImageView img_aut = new ImageView("images/icones/flag/World.png");
Label lbl_aut=new Label("3",img_aut);

optionsnat=FXCollections.observableArrayList(lbl_tun,lbl_fr,lbl_aut);

@FXML
ComboBox<Label> cb_nat = new ComboBox<Label>();

private String nat="1";

...

@Override
public void initialize(URL location, ResourceBundle resources) {

...

cb_nat.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
            @Override
              public void changed(ObservableValue<? extends Number> observableValue, Number number,  Number number2) {
                if(cb_nb.getItems().get((Integer) number2)=="1"){setNat("1");}
                else if(cb_nb.getItems().get((Integer) number2)=="2"){setNat("2");}
                else if(cb_nb.getItems().get((Integer) number2)=="3"){setNat("3");}
                else{System.err.println("Erreur lors de changement de nation..");}
              }
            });
    }
...

code.fxml

<ComboBox fx:id="cb_nat" layoutX="40.0" layoutY="265.0" prefWidth="150.0" />

编辑:

阅读此Article之后,我知道我的方法是完全错误的,强烈不建议这样做。

谢谢..(对不起我的英语不好)

我正在使用javafx多种输入类型的Java项目。但是我遇到了勒索的ComboBox行为,因为我在其上使用了带有images(ImageView)的标签。 1-组合框显示为白色!但我需要...

java javafx combobox imageview scenebuilder
1个回答
2
投票

导致此问题的原因是,当您选择一个ListCell时,它的项(在我们的情况下为Label)由ComboBox从ListCell(项observableList)移动到ButtonCell,ButtonCell是一个小框,由默认。但是,我们都知道,任何Node对象都不能在同一场景内的任何地方放置两次,并且由于ListCell类没有克隆函数,因此javafx将其从最后一个位置删除到新位置,即ButtonCell。

© www.soinside.com 2019 - 2024. All rights reserved.