java - ListCell 不显示自定义项目
问题描述
我正在尝试创建自定义ListCell<Chat>
,但是当我按数据填写时,主视图上的 ListView 是空的。我正在尝试结合使用 Spring Boot 和 JavaFX,如下所述:https ://github.com/turais/TuraisJavaFxExamples 。当我使用ListView<String>
它时,它将按预期显示字符串列表,但ListCell<Chat>
在我尝试自定义实现时不会显示我的自定义。
问题出在哪里,或者我错过了第二天找不到的东西......
主控制器:
public class MainController {
@FXML
private TextField txtSearch;
@FXML
private ListView<Chat> lvChats;
private ObservableList<Chat> chatsObservableList;
@Autowired
private ListChatCell listChatCell;
@FXML
public void initialize() {
}
@PostConstruct
public void init() {
this.chatsObservableList = FXCollections.observableArrayList(getTestList());
lvChats.setItems(chatsObservableList);
lvChats.setCellFactory(studentListView -> listChatCell);
}
@FXML
public void showSettings() {
}
private List<Chat> getTestList() {
List<Chat> chatList = new ArrayList<>();
chatList.add(new Chat("Last message 1", "Chat 1", "12:09", "3"));
chatList.add(new Chat("Last message 2", "Chat 2", "14:09", "1"));
return chatList;
}
}
列表单元:
public class ListChatCell extends ListCell<Chat> {
@FXML
private Text txtLastMessage;
@FXML
private Text txtChatName;
@FXML
private Text txtLastMessageTime;
@FXML
private Text txtUnreadMessage;
@FXML
private Pane pane;
@FXML
private ImageView imgChatIcon;
@FXML
public void initialize() {
}
@Override
protected void updateItem(Chat chat, boolean empty) {
super.updateItem(chat, empty);
if (empty || chat == null) {
setText(null);
setGraphic(null);
} else {
txtLastMessage.setText(chat.getLastMessage());
txtChatName.setText(chat.getChatName());
txtLastMessageTime.setText(String.valueOf(chat.getLastMessageTime()));
txtUnreadMessage.setText(String.valueOf(chat.getNumberUnreadMessages()));
imgChatIcon.setImage(new Image("tl.jpeg"));
setText("help");
setGraphic(pane);
}
}
}
我的 ListCell FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<Pane fx:id="pane" prefHeight="200.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.client.manager.fx.ui.cell.ListChatCell">
<children>
<HBox prefHeight="200.0" prefWidth="600.0">
<children>
<ImageView fx:id="imgChatIcon" fitHeight="200.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" />
<GridPane minHeight="-Infinity" prefHeight="200.0" prefWidth="400.0">
<children>
<Text fx:id="txtLastMessage" layoutX="90.0" layoutY="-1.0" strokeType="OUTSIDE" strokeWidth="0.0" text="LastMessageText" GridPane.rowIndex="1" />
<Text fx:id="txtChatName" strokeType="OUTSIDE" strokeWidth="0.0" text="ChatName" wrappingWidth="208.2060546875">
<font>
<Font size="14.0" />
</font>
</Text>
<Text fx:id="txtLastMessageTime" strokeType="OUTSIDE" strokeWidth="0.0" text="TimeLastMessage" GridPane.columnIndex="1" />
<Text fx:id="txtUnreadMessage" strokeType="OUTSIDE" strokeWidth="0.0" text="NumberOfUnreadMessages" GridPane.columnIndex="1" GridPane.rowIndex="1" />
</children>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="321.0" minWidth="10.0" prefWidth="305.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="128.0" minWidth="10.0" prefWidth="71.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="189.0" minHeight="10.0" prefHeight="95.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="295.0" minHeight="10.0" prefHeight="105.0" vgrow="SOMETIMES" />
</rowConstraints>
</GridPane>
</children>
</HBox>
</children>
</Pane>
主要 FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.client.manager.fx.ui.TelegramController">
<children>
<SplitPane prefHeight="400.0" prefWidth="200.0">
<items>
<VBox prefHeight="323.0" prefWidth="198.0">
<children>
<HBox prefHeight="27.0" prefWidth="200.0">
<children>
<Button mnemonicParsing="false" onAction="#showSettings" text="Settings" />
<TextField fx:id="txtSearch" />
</children>
</HBox>
<ListView fx:id="lvChats" />
</children>
</VBox>
</items>
</SplitPane>
</children>
</AnchorPane>
解决方案
推荐阅读
- arrays - 对文档中的值求和
- orbeon - 如何将导航与使用表单生成器创建的 orbeon 表单一起使用?
- linux - top 通过命令行选项添加过滤器命令
- android - Room - 在运行时(在用户端)添加或删除列?
- java - JSON对象数组到Java POJO
- java - 如何在 antlr4 访问者方法中抛出异常?
- spring - spring findAll by parent 属性
- python - 我可以更改函数参数的默认值吗?
- google-apps-script - 谷歌脚本,onEdit 功能突然不起作用,如何解决?
- javascript - 收听添加到文档的脚本