ListView javafx中的自定义文本

ListView javafx中的自定义文本,java,listview,javafx,text,Java,Listview,Javafx,Text,我想在JavaFX中设计一个定制的listview,我需要添加一些不同大小的字体,但是我的代码不起作用 以下是我的updateItem函数: list.setCellFactory(param -> new ListCell<String>() { @Override protected void updateItem(String item, boolean empty) { super.updateItem(item,

我想在JavaFX中设计一个定制的listview,我需要添加一些不同大小的字体,但是我的代码不起作用

以下是我的updateItem函数:

list.setCellFactory(param -> new ListCell<String>() {
        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            if (empty) {
                setText(null);
                setGraphic(null);
            } else {
                ImageView imageView = new ImageView();
                switch (item) {
                    case "Back":
                        imageView.setImage(image1);
                        System.out.println(imageView.getImage());
                        break;
                    case "Shop":
                        imageView.setImage(image0);
                        break;
                }
                imageView.setFitHeight(100);
                imageView.setFitWidth(100);
                Text text = new Text(item);
                text.setFont(Font.font("B Aria", 500));
                Text text1 = new Text("100");
                text1.setFont(Font.font("Arial", 200));
                setText(text.getText() + "\n" + text1.getText());
                setGraphic(imageView);
                setStyle("-fx-background-color: white");
                setStyle("-fx-text-fill:#5aa6f0;");
            }
        }
    });
list.setCellFactory(参数->新建ListCell(){
@凌驾
受保护的void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
if(空){
setText(空);
设置图形(空);
}否则{
ImageView ImageView=新的ImageView();
开关(项目){
案例“背”:
imageView.setImage(image1);
System.out.println(imageView.getImage());
打破
案例“商店”:
imageView.setImage(image0);
打破
}
imageView.setFitHeight(100);
imageView.setFitWidth(100);
文本文本=新文本(项目);
setFont(Font.Font(“B Aria”,500));
文本文本1=新文本(“100”);
text1.setFont(Font.Font(“Arial”,200));
setText(text.getText()+“\n”+text1.getText());
设置图形(图像视图);
设置样式(“-fx背景色:白色”);
setStyle(“-fx文本填充:#5aa6f0;”);
}
}
});
如您所见,两个文本的字体和大小相同:


我怎样才能解决这个问题?谢谢。

单元格的
text
属性只是一个字符串:它不携带任何样式或字体信息。因此,这里要做的就是将单元格的文本设置为两个字符串的串联,并在它们之间换行。文本的样式仅由单元格本身设置的样式决定(即文本填充为
#5aa6f0

要在此处实现所需的功能,需要将两个
文本
对象及其样式显示为
图形
的一部分。由于您已经有一个图像视图作为图形,因此您需要将它们结合起来:例如,您可以有一个包含两个
文本的
VBox
,以及一个包含图像和
VBox
HBox
。您可能需要对布局进行试验,以使其完全符合您的要求,但这应该会让您产生以下想法:

list.setCellFactory(param -> new ListCell<String>() {

    private final VBox textContainer = new VBox();
    private final Text itemText = new Text();
    private final Text valueText = new Text();
    private final HBox graphic = new HBox();
    private final ImageView imageView = new ImageView();

    {
        textContainer.getChildren().addAll(itemText, valueText);
        graphic.getChildren().addAll(imageView, textContainer);
        // may be better to put styles in an external CSS file:
        itemText.setFill(Color.web("#5aa6f0"));
        itemText.setFont(Font.font("B Aria", 500));
        valueText.setFill(Color.web("#5aa6f0"));
        valueText.setFont(Font.font("Arial", 200));
        setStyle("-fx-background-color: white;");
        imageView.setFitHeight(100);
        imageView.setFitWidth(100);
    }

    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setGraphic(null);
        } else {
            switch (item) {
                case "Back":
                    imageView.setImage(image1);
                    break;
                case "Shop":
                    imageView.setImage(image0);
                    break;
            }
            itemText.setText(item);
            valueText.setText("100");
            setGraphic(graphic);
        }
    }
});
list.setCellFactory(参数->新建ListCell(){
私有最终VBox textContainer=新VBox();
私有最终文本itemText=新文本();
私有最终文本值Text=新文本();
专用最终HBox图形=新HBox();
private final ImageView ImageView=新建ImageView();
{
textContainer.getChildren().addAll(itemText,valueText);
graphic.getChildren().addAll(imageView,textContainer);
//最好将样式放入外部CSS文件中:
setFill(Color.web(#5aa6f0”);
setFont(Font.Font(“B Aria”,500));
valueText.setFill(Color.web(“#5aa6f0”);
valueText.setFont(Font.Font(“Arial”,200));
setStyle(“-fx背景色:白色;”);
imageView.setFitHeight(100);
imageView.setFitWidth(100);
}
@凌驾
受保护的void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
if(空){
设置图形(空);
}否则{
开关(项目){
案例“背”:
imageView.setImage(image1);
打破
案例“商店”:
imageView.setImage(image0);
打破
}
itemText.setText(item);
valueText.setText(“100”);
设置图形(图形);
}
}
});