JavaFX TableView列调整大小问题

3
我正在使用Scene Builder来设计GUI界面。在TableView中,我有9个列。所有的列除了一个之外,宽度都很好。这里是Scene Builder的截图:enter image description here 我只想让“serial”列变窄一点。所以我将调整策略设置为CONSTRAINED_RESIZE_POLICY。并且禁用“serial”列的调整大小,并将其设置为固定大小(例如50)。
在Scene Builder预览中它运行得很好,但是当我编译代码时,我得到了一个空列,如下所示:enter image description here 只有通过使用鼠标调整任何列的大小后,它才会自动获得所需的宽度。我的问题是为什么它首先需要使用鼠标拖动任何列?这正是我不想要的!
我该如何解决它?
1个回答

2

我的程序也遇到了同样的问题,我是这样解决的。

TableView 设置为 CONSTRAINED_RESIZE_POLICY。然后,在你想要设置特定宽度的 TableColumn 上,将 maxminpref 大小设置成相同的大小。这样,它的大小既不会比你的大小大,也不会比你的大小小。

编辑 1:

经过调试,我发现你只需要将 TableColumnmax width 设置为你想要的大小,这样就会在表头上分配适当的空间,但下面的示例仍然有效。

以下是示例:

Environment.fxml

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

<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.BorderPane?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.91" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <TableView prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
        <columns>
          <TableColumn prefWidth="75.0" text="First Name" />
          <TableColumn prefWidth="75.0" text="Last Name" />
            <TableColumn prefWidth="75.0" text="Email Address" />
            <TableColumn maxWidth="50.0" minWidth="50.0" prefWidth="50.0" text="Age" />
            <TableColumn maxWidth="50.0" minWidth="50.0" prefWidth="50.0" text="Height" />
        </columns>
         <columnResizePolicy>
            <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
         </columnResizePolicy>
      </TableView>
   </center>
</BorderPane>

主要的。在我的例子中,fxml 文件在一个名为 fxml 的目录中。请根据此调整代码。

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class Main extends Application {


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

    @Override
    public void start(Stage primaryStage) throws IOException {

        FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("fxml/Environment.fxml"));
        Parent root = loader.load();
        Scene scene = new Scene(root,800,800);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接