By using ComboBoxListCell,
you can draw a combo box inside the list cell. Whenever user clicks on list
cell, you can display list of options using ComboBoxListCell.
TestFX.java
Ex
ObservableList<String>
countries = FXCollections.observableArrayList();
countries.addAll("India",
"Australia", "Bahrain", "Bangladesh",
"Cambodia", "Connie", "Chile",
"France", "Hong Kong", "Iran");
listView.setCellFactory(ComboBoxListCell.forListView(countries));
Find the
below working application.
ListViewApp.java
package com.sample.demos; import javafx.application.Application; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.control.cell.ComboBoxListCell; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.stage.Stage; public class ListViewApp extends Application { public static final ObservableList<String> countries = FXCollections.observableArrayList(); public static final ObservableList<String> dataToBePopulated = FXCollections.observableArrayList(); @Override public void start(Stage primaryStage) { Label label = new Label(); label.setTextFill(Color.RED); label.setFont(new Font("Cambria", 20)); for (int i = 0; i < 5; i++) { dataToBePopulated.add("Country " + (i + 1)); } final ListView<String> listView = new ListView<>(dataToBePopulated); listView.setMinWidth(300); listView.setMinHeight(300); listView.setEditable(true); countries.addAll("India", "Australia", "Bahrain", "Bangladesh", "Cambodia", "Connie", "Chile", "France", "Hong Kong", "Iran"); listView.setCellFactory(ComboBoxListCell.forListView(countries)); listView.getSelectionModel().selectedItemProperty() .addListener((ObservableValue<? extends String> ov, String old_val, String new_val) -> { label.setText("Country changed from " + old_val + " to " + new_val); }); HBox hBox = new HBox(); hBox.getChildren().addAll(listView, label); primaryStage.setScene(new Scene(hBox, 1000, 250)); primaryStage.setTitle("List View Sample"); primaryStage.show(); } }
TestFX.java
package com.sample.demos; import javafx.application.Application; public class TestFX { public static void main(String args[]) { Application.launch(ListViewApp.class, args); } }
No comments:
Post a Comment