ListView javafx中的自定义文本
我想在JavaFX中设计一个定制的listview,我需要添加一些不同大小的字体,但是我的代码不起作用 以下是我的updateItem函数: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,
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”);
设置图形(图形);
}
}
});