JavaFX中如何实现文本溢出时显示省略号?
解决JavaFX自定义文件选择器中文本溢出显示省略号的问题
你遇到的这个文本溢出问题很好解决,核心原因是Text组件本身不支持自动截断并显示省略号,换成JavaFX的Label组件就能轻松实现需求,因为Label专门提供了文本溢出处理的属性。
具体修改步骤
- 将显示文件名的
<Text>标签替换为<Label> - 给Label添加
textOverrun="ELLIPSIS"属性,这会让文本超出容器时自动以...结尾 - 设置
maxWidth="Infinity"让Label填充父容器的可用宽度,确保截断逻辑生效 - 保留原有的margin和对齐属性,保持界面样式一致
修改后的核心代码片段
原来的Text部分:
<Text stroke="BLACK" strokeType="OUTSIDE" strokeWidth="0.0" text="Chosen file name" StackPane.alignment="CENTER_LEFT"> <StackPane.margin> <Insets left="5.0"/> </StackPane.margin> </Text>
替换为Label后的代码:
<Label text="Chosen file name" textOverrun="ELLIPSIS" maxWidth="Infinity" StackPane.alignment="CENTER_LEFT"> <StackPane.margin> <Insets left="5.0"/> </StackPane.margin> <style> -fx-text-fill: black; </style> </Label>
完整修改后的FXML文件
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.control.Label?> <GridPane hgap="5.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.131"> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="200.0" prefWidth="200.0"/> <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="25.0" prefWidth="25.0"/> <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="25.0" prefWidth="25.0"/> </columnConstraints> <rowConstraints> <RowConstraints vgrow="SOMETIMES"/> </rowConstraints> <children> <StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="200.0" style="-fx-background-color: lightgrey;" GridPane.valignment="CENTER"> <GridPane.margin> <Insets/> </GridPane.margin> <children> <Label text="Chosen file name" textOverrun="ELLIPSIS" maxWidth="Infinity" StackPane.alignment="CENTER_LEFT"> <StackPane.margin> <Insets left="5.0"/> </StackPane.margin> <style> -fx-text-fill: black; </style> </Label> </children> </StackPane> <StackPane maxHeight="-Infinity" minHeight="-Infinity" prefHeight="25.0" style="-fx-background-color: lightgrey;" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.valignment="CENTER"> <children> <Text strokeType="OUTSIDE" strokeWidth="0.0" text="x"/> </children> </StackPane> <StackPane maxHeight="-Infinity" minHeight="-Infinity" prefHeight="25.0" style="-fx-background-color: lightgrey;" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.valignment="CENTER"> <children> <Text strokeType="OUTSIDE" strokeWidth="0.0" text="..." StackPane.alignment="CENTER"/> </children> </StackPane> </children> <padding> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0"/> </padding> </GridPane>
额外说明
如果你坚持要使用Text组件实现,需要手动监听父容器的宽度变化,编写代码截断文本并添加省略号,这种方式比较繁琐,不如直接用Label来得便捷。
内容的提问来源于stack exchange,提问作者Valeme
相关产品推荐
相关产品推荐

