Gestionarea articolelor ComboBox în JavaFX

Poplez un ComboBox folosind obiecte Text. Folosirea obiectelor Text mai degrabă decât a șirurilor de caractere îmi permite să adaug o valoare de id pe care o pot folosi în programul meu și apoi o pot exploata atunci când decid să internaționalizez interfața de utilizare. Oricum, iată ce fac: Clasa principală:

public class MainApp extends Application {

private Stage primaryStage;

@Override
public void start(Stage primaryStage) {
    this.primaryStage = primaryStage;
    try {
        AnchorPane paneMain = (AnchorPane) FXMLLoader.load(getClass().getResource("Test.fxml"));
        Scene scene = new Scene(paneMain);
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public static void main(String[] args) {
    launch(args);
}

}

Controlor:

public class Test implements Initializable{

@FXML
private AnchorPane anchorPane;
@FXML
private ComboBox<Text> comboTime; 
private Text days;
private Text hours;
private Text minutes;
private int timeMultiplier; 

public Test(){
    days = new Text("Days");
    days.setId("86400000");
    hours = new Text("Hours");
    hours.setId("3600000");
    minutes = new Text("Minutes");
    minutes.setId("3600000");
    timeMultiplier = 0;
}

@Override
public void initialize(URL location, ResourceBundle resources) {
    comboTime.getItems().removeAll(comboTime.getItems());
    comboTime.getItems().addAll(days, hours, minutes);
    comboTime.getSelectionModel().select(hours);

}

@FXML
private void setTimeMultiplier(){
    Text text = comboTime.getSelectionModel().getSelectedItem();
    timeMultiplier = Integer.valueOf(text.getId());
}

}

Test.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.collections.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>

<AnchorPane id="AnchorPane" fx:id="anchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="100.99990000000253" prefWidth="94.99990000000253" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.spacitron.backupp.ui.controllers.Test">
  <children>
    <HBox id="HBox" alignment="CENTER" layoutX="41.0" layoutY="224.0" prefWidth="216.0" spacing="5.0" />
    <ComboBox id="comboInterval" fx:id="comboTime" editable="false" layoutX="14.0" layoutY="22.0" onAction="#setTimeMultiplier">
      <items>
        <FXCollections fx:factory="observableArrayList">
          <String fx:value="Item 1" />
          <String fx:value="Item 2" />
          <String fx:value="Item 3" />
        </FXCollections>
      </items>
    </ComboBox>
  </children>
</AnchorPane>

Acum, asta funcționează bine. Problema este însă că atunci când selectez un articol, textul acelui articol rămâne necompletat astfel:

introduceți descrierea imaginii aici

Și dacă aleg altul, dispare și acesta:

introduceți descrierea imaginii aici

Încă pot selecta elementele, dar pur și simplu nu sunt acolo pentru a fi văzute. Este aceasta o eroare și, dacă da, există o modalitate de a o ocoli?

EDITAT pentru a oferi MCVE


person spacitron    schedule 16.01.2014    source sursă
comment
Dacă postați un MCVE stackoverflow.com/help/mcve, oamenii l-ar putea încerca pe computerele lor pentru dvs.   -  person Goibniu    schedule 16.01.2014
comment
M-am uitat la documentația pentru ComboBox (care a fost adăugată doar în JavaFx2.1+, așa că nu pot testa codul dvs. (îmi pare rău). Dar are un avertisment la început că nu ar trebui să adăugați direct noduri de instanță , dar ar trebui să folosească o fabrică de celule pentru a vă crea instanțe: docs.oracle.com/javafx/2/api/javafx/scene/control/ComboBox.html Nu sunt sigur dacă acest lucru vă va fi de vreun folos, dar încercați și vedeți.   -  person Goibniu    schedule 16.01.2014


Răspunsuri (1)


Nu ar trebui să puneți nodurile Text în ComboBox... vă rugăm să vedeți această întrebare care vă va ajuta: setButtonCell pentru ComboBox

person Jurgen    schedule 17.01.2014