根据行大小调整JavaFx TableView的大小

时间:2015-09-17 00:24:59

标签: java javafx

我想设置JavaFx TableView的大小,以便所有行都可见,而无需滚动。即,TableView不应大于或小于显示所有行而不滚动所需的任何大小。我使用自定义TableCellFactory来调整行的高度,因为一些单元格将包含文本,因此并非所有行都具有相同的高度。

我首先尝试在自定义TableCellFactory中将TableRow添加到集合中,然后创建一个getTableHeight方法,可以调用该方法来确定所有行的总高度。但是,似乎正在发生的事情是,只有最初可见的行才会添加到集合中,而不是所有行,因此高度计算不会正确显示。

还有更好的方法吗?

public class FormattedTableCellFactory<S, String> implements Callback<TableColumn<S, String>, TableCell<S, String>> {

    public FormattedTableCellFactory() {

    }

    protected Set<TableRow> tableRowSet = new HashSet<>();

    public double getTableHeight() {
        double total = 0;
        Iterator<TableRow> iterator = tableRowSet.iterator();
        while( iterator.hasNext() ) {
            double height =  iterator.next().getHeight();
            total += height;
        }
        return total;
    }

    /**
     * set Tooltip and enable WordWrap for Description column
     * @param p
     * @return 
     */
    @Override
    public TableCell<S, String> call(TableColumn<S, String> p) {

        TableCell<S, String> cell = new TableCell<S, String>() {

            {
                tableRowSet.add(this.getTableRow() );
            }

            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);

                if (item != null) {
                    Tooltip tooltip = new Tooltip(item.toString());
                    this.setText(item.toString());
                    setTooltip(tooltip);
                    Text text = new Text(item.toString());
                    text.wrappingWidthProperty().bind(widthProperty());
                    text.textProperty().bind(textProperty());
                    this.setWrapText(true);
                    this.setGraphic(text);
                    this.setAlignment(Pos.TOP_LEFT);
                    this.setHeight(text.getWrappingWidth());

                } else {
                    this.setText(null);
                }
            }
        };
        return cell;
    }
}

0 个答案:

没有答案