package com.javafx.demo.control; /** * @author: XiaHui * @date: 2017年4月10日 下午6:04:49 */ import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.Priority; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import javafx.util.Callback; public class ListCellTextFieldTest extends Application { static class XCell extends ListCell<String> { HBox hbox = new HBox(); TextField label = new TextField("(empty)"); Pane pane = new Pane(); Button button = new Button("(>)"); String lastItem; public XCell() { super(); hbox.getChildren().addAll(label, pane, button); HBox.setHgrow(pane, Priority.ALWAYS); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println(lastItem + " : " + event); } }); } @Override protected void updateItem(String item, boolean empty) { super.updateItem(item, empty); setText(null); // No text in label of super class if (empty) { lastItem = null; setGraphic(null); } else { lastItem = item; label.setText(item != null ? item : "<null>"); setGraphic(hbox); } } } @Override public void start(Stage primaryStage) throws Exception { StackPane pane = new StackPane(); Scene scene = new Scene(pane, 300, 150); primaryStage.setScene(scene); ObservableList<String> list = FXCollections.observableArrayList( "Item 1", "Item 2", "Item 3", "Item 4"); ListView<String> lv = new ListView<>(list); lv.setCellFactory(new Callback<ListView<String>, ListCell<String>>() { @Override public ListCell<String> call(ListView<String> param) { return new XCell(); } }); pane.getChildren().add(lv); primaryStage.show(); } public static void main(String[] args) { launch(args); } }