आपके पास 2 दृष्टिकोण हैं:
1. बस अपने डेटामोडेल कक्षा में toString()
विधि को ओवरराइड करें। उदाहरण:
public class Demo extends Application {
private final ObservableList<Employee> data =
FXCollections.observableArrayList(
new Employee("Azamat", 2200.15),
new Employee("Veli", 1400.0),
new Employee("Nurbek", 900.5));
@Override
public void start(Stage primaryStage) {
ComboBox<Employee> combobox = new ComboBox<>(data);
combobox.getSelectionModel().selectFirst(); // Select first as default
combobox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Employee>() {
@Override
public void changed(ObservableValue<? extends Employee> arg0, Employee arg1, Employee arg2) {
if (arg2 != null) {
System.out.println("Selected employee: " + arg2.getName());
}
}
});
StackPane root = new StackPane();
root.getChildren().add(combobox);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
public static class Employee {
private String name;
private Double salary;
@Override
public String toString() {
return name + " (sal:" + salary + ")";
}
public Employee(String name, Double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
}
public static void main(String[] args) {
launch(args);
}
}
कर्मचारी वर्ग के ओवर्रिडेन टूस्ट्रिंग() पर ध्यान दें। Combobox की कुंजी (वास्तविक मान) Employee
उदाहरण होगी और इस मामले में प्रदर्शन मान employee.toString()
है।
2. दूसरा दृष्टिकोण combobox की सेल फैक्ट्री संपत्ति सेट करना है।
combobox.setCellFactory(new Callback<ListView<Employee>, ListCell<Employee>>() {
@Override
public ListCell<Employee> call(ListView<Employee> arg0) {
return new ListCell<Employee>() {
private final Button btn;
{
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
btn = new Button();
}
@Override
protected void updateItem(Employee item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setGraphic(null);
} else {
btn.setStyle(item.getSalary() > 1000 ? "-fx-base:red" : "-fx-base: green");
btn.setText(item.getName() + "=" + item.getSalary());
setGraphic(btn);
}
}
};
}
});
यह दृष्टिकोण सेल प्रतिपादन पर अधिक शक्तिशाली नियंत्रण प्रदान करता है। आप केवल प्रदर्शन मूल्य को प्रारूपित नहीं कर सकते हैं बल्कि सेल में किसी भी नोड (नियंत्रण) को भी शामिल कर सकते हैं (इस मामले में बटन) और कुछ देखने तर्क (item.getSalary()? "": "") भी जोड़ें। वास्तविक मूल्य वही रहता है अर्थात कर्मचारी उदाहरण।
स्रोत
2012-05-22 10:56:54
क्या आपने [कॉम्बो बॉक्स पर ट्यूटोरियल] देखा है (http://docs.oracle.com/javafx/2/ui_controls/combo-box.htm)? – assylias
@ वासिलियास - हाँ मैंने किया। इसमें मुख्य मूल्य जोड़ी के साथ कॉम्बो-बॉक्स बनाने के बारे में कुछ भी उल्लेख नहीं है, इसमें कुछ आइटमों के साथ एक सादा कॉम्बो-बॉक्स है। –