如何在JavaFX中为TableView创建一个带有前导省略号的列?

问题描述 投票:0回答:1

我有一列路径,其中所有路径都属于一个根文件夹。当路径不适合列时(它们可能相当长并且列宽有限),我想仅向用户显示带有前导省略号的路径末尾。例如:

..someverylongdirectoryname/file.txt
..omeverylongdirectoryname/file2.txt

我尝试了这段代码,但没有成功。

public class JavaFxTest extends Application {


    public static class FilePath {
        private final String path;

        public FilePath(String path) {
            this.path = path;
        }

        public String getPath() {
            return path;
        }
    }

    @Override
    public void start(Stage primaryStage) {
        TableView<FilePath> tableView = new TableView<>();

        TableColumn<FilePath, String> pathColumn = new TableColumn<>("Path");
        pathColumn.setCellValueFactory(new PropertyValueFactory<>("path"));
        pathColumn.setPrefWidth(200);

        pathColumn.setCellFactory(column -> new javafx.scene.control.TableCell<>() {
            private final Text text = new Text();

            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (empty || item == null) {
                    setGraphic(null);
                } else {
                    text.setText(item);
                    text.setStyle("-fx-text-alignment: right;");
                    setGraphic(text);
                }
            }
        });

        tableView.getColumns().add(pathColumn);
        tableView.getItems().addAll(
            new FilePath("/usr/local/bin/someverylongdirectoryname/file.txt"),
            new FilePath("/usr/local/bin/someverylongdirectoryname/file2.txt")
        );

        primaryStage.setScene(new Scene(tableView, 300, 200));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

谁能告诉我怎么做吗?

java javafx
1个回答
0
投票

看起来您希望在标签的开头而不是结尾处显示文本溢出省略号。只需使用

Cell
Labeled
的事实并设置溢出样式:

        pathColumn.setCellFactory(column -> new javafx.scene.control.TableCell<>() {

            {
                setTextOverrun(OverrunStyle.LEADING_ELLIPSIS);
            }
            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (empty || item == null) {
                    setGraphic(null);
                } else {
                    setText(item);
                }
            }
        });
© www.soinside.com 2019 - 2024. All rights reserved.