如何获取TableView列的大小?

时间:2015-08-28 13:27:14

标签: java javafx width tableview tablecolumn

有没有办法获得TableView列的当前大小?我甚至都没能在网上找到这个问题,这让我觉得我错过了一些东西,因为我不能成为第一个需要这个功能的人。

如果不可能,有没有办法设置TableView列的大小?这也可以解决我的问题,虽然我更喜欢大小。 setFixedCellSize(double)看起来很有希望,但我无法让它发挥作用。

我希望在TableView中的每一列上方都有一个TextField,其大小与上面的列相同。如果有更好的方法来实现这一点,我愿意接受建议。

1 个答案:

答案 0 :(得分:1)

您可以使用Property-Bindings。但TableColumn或TextField的width-Property是只读的。这是正确的,因为宽度和高度是渲染整个窗口时布局过程的一部分。

因此,您需要为TextField设置三个大小min - pref - max width,其中包含TableColumn的当前宽度。在我看来,首选的方法是将TableColumns宽度作为TextFields宽度的主控。

现在,即使手动调整大小,TextField也会保持与" bound"相同的宽度。 TableColumns的宽度。

下面有一点Minimal, Complete, and Verifiable example

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class TableTest extends Application {

  @Override
  public void start(Stage primaryStage) {
    TextField field = new TextField();

    TableView<String> table = new TableView<>();
    TableColumn<String, String> column = new TableColumn("Header Text");
    table.getColumns().add(column);

    field.prefWidthProperty().bind(column.widthProperty());
    field.minWidthProperty().bind(column.widthProperty());
    field.maxWidthProperty().bind(column.widthProperty());

    VBox root = new VBox();
    root.getChildren().addAll(field, table);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();
  }

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