JavaFX ListView实现文本大写与自动换行的问题求助
解决ListView项同时实现全大写与自动换行的问题
你的核心问题在于同时混用了setText()和setGraphic():当你给ListCell设置了Graphic(也就是那个用于换行的Text节点)后,Cell的text属性会被完全忽略,所以你在updateItem里写的setText(item.toUpperCase())根本不会显示;反过来注释掉Graphic的代码,setText能生效,但又失去了换行能力。
要让两个功能同时生效,我们需要统一用那个Text节点来处理文本显示——既让它负责换行,又让它显示转成大写的内容。修改后的代码如下:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.util.Callback; public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { ListView<String> myList = new ListView<>(); myList.setCellFactory(new Callback<ListView<String>, ListCell<String>>() { @Override public ListCell<String> call(final ListView<String> list) { // 把Text节点提升为内部类成员,方便updateItem访问 final Text textNode = new Text(); // 绑定换行宽度,保持原逻辑 textNode.wrappingWidthProperty().bind(list.widthProperty().subtract(15)); return new ListCell<String>() { @Override protected void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (empty || item == null) { // 空项时清空Graphic,避免残留内容 setGraphic(null); } else { // 直接更新Text节点的文本为大写形式 textNode.setText(item.toUpperCase()); // 设置Graphic为这个Text节点 setGraphic(textNode); } } }; } }); // 添加测试数据 for (int i = 0; i < 100; i++) { myList.getItems().add( "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " + "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris " + "nisi ut aliquip ex ea commodo consequat." ); } primaryStage.setScene(new Scene(myList)); primaryStage.setTitle("ListWrapFixed"); primaryStage.show(); } }
关键改动说明:
- 将用于换行的
Text节点从初始化块移到外部,作为内部类的成员变量,这样在updateItem方法里可以直接修改它的文本内容 - 不再使用
setText(),而是直接给Text节点设置转成大写的文本,同时保持它的wrappingWidth绑定,确保换行生效 - 处理空项时,把Cell的Graphic设为
null,避免旧的文本内容残留
这样修改后,ListView的项就能同时实现全大写显示和自动换行的效果了。
内容的提问来源于stack exchange,提问作者Osvald Laurits
相关产品推荐
相关产品推荐

