JavaFX 响应式 TableView

标签 java javafx fxml

该图像非常不言自明。当我调整窗口大小时,TableView 不会自动调整大小。在 C# 中,我曾经通过使用 Anchor/Dock 属性来做到这一点。我应该如何在 JavaFX 中做到这一点?我找不到有关它的信息,可能是因为 Java 使用不同的术语。

enter image description here

表.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<DialogPane prefHeight="300.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.TableController">
    <header>
        <AnchorPane minHeight="50.0" minWidth="0.0" prefHeight="80.0" prefWidth="400.0">
            <children>
                <HBox alignment="TOP_CENTER" prefHeight="100.0" prefWidth="400.0">
                    <children>
                        <Label fx:id="descriptionLabel" alignment="CENTER" contentDisplay="CENTER" prefWidth="400.0" text="Text:" textAlignment="JUSTIFY">
                            <font>
                                <Font size="22.0" />
                            </font>
                        </Label>
                    </children>
                </HBox>
            </children>
        </AnchorPane>
    </header>
    <content>
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="400.0">
            <children>
                <TableView fx:id="tableView" layoutY="-31.0" prefHeight="252.0" prefWidth="400.0">
                    <columns>
                    </columns>
                </TableView>
            </children>
        </AnchorPane>
    </content>
</DialogPane>

TableController.java

package gui;

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.util.Callback;

import java.sql.ResultSet;
import java.sql.SQLException;

public class TableController {

    @FXML
    private Label descriptionLabel;

    @FXML
    private TableView tableView;

    public void setTableResultset(String label, ResultSet resultSet) throws SQLException {
        ObservableList<ObservableList> data = FXCollections.observableArrayList();

        // Columns
        for (int i = 0; i < resultSet.getMetaData().getColumnCount(); i++) {
            final int j = i;
            TableColumn col = new TableColumn(resultSet.getMetaData().getColumnName(i + 1));
            col.setCellValueFactory((Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>) param -> {
                return new SimpleStringProperty(param.getValue().get(j).toString());
            });
            tableView.getColumns().add(col);
        }

        // Add records
        while (resultSet.next()) {
            ObservableList<String> row = FXCollections.observableArrayList();
            for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
                row.add(resultSet.getString(i));
            }
            data.add(row);
        }
        tableView.setItems(data);

        // Set label text
        descriptionLabel.setText(label);
    }
}

最佳答案

您需要设置AnchorPane的顶部、底部、右侧和左侧 anchor :

<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="400.0">
    <children>
        <TableView fx:id="tableView" layoutY="-31.0" prefHeight="252.0" prefWidth="400.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <columns>
            </columns>
        </TableView>
    </children>
</AnchorPane>

关于JavaFX 响应式 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60335889/

相关文章:

java - Spring HATEOAS - 两个相同的链接

java - 使用 Jackson 反序列化字符串化(引号括起)嵌套对象

java - 当附加(非模式)窗口关闭时,如何防止将主应​​用程序窗口置于前面。 Mac 操作系统、JavaFX

java - 在 JavaFx 中,在向 ComboBox 对象添加操作后,如何使 ComboBox 可编辑

JavaFX 8 FXML TextField(可能是其他变量)始终为 null

java - 使用 smack api 连接到 openfire 服务器

java - Spring Boot 上的自定义配置位置和配置名称

java - 设置 GridPane 中各个单元格的颜色 (JavaFX)

javafx - 如何在 fxml 中设置 BorderPane 的边距?

来自 Controller 的 JavaFX 转换场景