ListCell 继承自Label,所以它可以当作一个容器来使用,及自定义label中的内容,主要用于自定义控件内容。凡是包含有ListCell控件的内容都可以进行自定义UI。
在Combox、TreeView、TableView、TreeTableView等中进行自定义显示UI。是进行自定义UI的基础。
1、控件setCellFactory方式
//设置格式
cbbBox.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
@Override
public ListCell<String> call(ListView<String> param) {
MyListCell<String> ll = new MyListCell();
return ll;
}
});
2、自定义实现ListCell
//设置cell显示布局内容
class MyListCell<T> extends ListCell<T>{
@Override
protected void updateItem(T item, boolean empty) {
// TODO Auto-generated method stub
super.updateItem(item, empty);
HBox bocc = new HBox();
Button button = new Button((String) item);
bocc.getChildren().add(button);
this.setGraphic(bocc);
}
}
3、设置显示的内容
//设置显示的数据
cbbBox.setConverter(new StringConverter<String>() {
@Override
public String toString(String object) {
// TODO Auto-generated method stub
return object+"---ssssss";
}
@Override
public String fromString(String string) {
// TODO Auto-generated method stub
System.out.println(string);
return string;
}
});
完整:
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.util.Callback;
import javafx.util.StringConverter;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Group group = new Group();
Scene scene = new Scene(group,400,400);
ComboBox<String> cbbBox = new ComboBox<>();
Button btnButton = new Button("getValue");
btnButton.setOnAction((e)->{
System.out.println(cbbBox.getValue());
});
cbbBox.getItems().addAll("string1","string2","string3");
//设置显示的数据
cbbBox.setConverter(new StringConverter<String>() {
@Override
public String toString(String object) {
// TODO Auto-generated method stub
return object+"---ssssss";
}
@Override
public String fromString(String string) {
// TODO Auto-generated method stub
System.out.println(string);
return string;
}
});
//设置格式
cbbBox.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
@Override
public ListCell<String> call(ListView<String> param) {
MyListCell<String> ll = new MyListCell();
return ll;
}
});
group.getChildren().add(cbbBox);
group.getChildren().add(btnButton);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
//设置cell显示布局内容
class MyListCell<T> extends ListCell<T>{
@Override
protected void updateItem(T item, boolean empty) {
// TODO Auto-generated method stub
super.updateItem(item, empty);
HBox bocc = new HBox();
Button button = new Button((String) item);
bocc.getChildren().add(button);
this.setGraphic(bocc);
}
}