有没有办法获得TableView列的当前大小?我甚至都没能在网上找到这个问题,这让我觉得我错过了一些东西,因为我不能成为第一个需要这个功能的人。
如果不可能,有没有办法设置TableView列的大小?这也可以解决我的问题,虽然我更喜欢大小。 setFixedCellSize(double)
看起来很有希望,但我无法让它发挥作用。
我希望在TableView中的每一列上方都有一个TextField,其大小与上面的列相同。如果有更好的方法来实现这一点,我愿意接受建议。
答案 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);
}
}