2014-01-16 13 views
5

Ich beziehe eine ComboBox mit Textobjekten. Durch die Verwendung von Text-Objekten anstelle von Strings kann ich einen ID-Wert hinzufügen, den ich in meinem Programm verwenden und später ausnutzen kann, wenn ich mich entscheide, die Benutzeroberfläche zu internationalisieren. Wie auch immer, hier ist das, was ich tue: Hauptklasse:Verwalten von ComboBox-Elementen in JavaFX

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); 
} 

}

Controller:

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> 

Nun, diese Werke Alles gut. Das Problem ist jedoch, dass, wenn ich einen Artikel der Text auf dem Elemente auswählen wird leer wie so:

enter image description here

Und wenn ich ein anderes wählen, das verschwindet auch:

enter image description here

I kann immer noch die Gegenstände auswählen, aber sie sind einfach nicht da, um gesehen zu werden. Ist das ein Fehler und wenn ja, gibt es einen Weg um ihn herum?

EDITED MCVE bieten

+1

Wenn Sie eine MCVE http schreiben: // Stackoverflow .com/help/mcve Leute könnten es auf ihren Maschinen für Sie ausprobieren. – Goibniu

+0

@Goibniu Bearbeiten beendet. – spacitron

+2

Ich habe mir die Dokumentation zu ComboBox angesehen (die nur in JavaFx2.1 + hinzugefügt wurde, damit ich Ihren Code nicht testen kann), aber am Anfang hat sie eine Warnung, dass Sie keine Instanzknoten hinzufügen sollten direkt, aber sollte eine Zellenfabrik verwenden, um Ihre Instanzen zu erstellen: http://docs.oracle.com/javafx/2/api/javafx/scene/control/ComboBox.html Ich bin mir nicht sicher, ob das von sein wird irgendeinen Nutzen für dich, aber gib ihm einen Schuß und sieh. – Goibniu

Antwort