繁体   English   中英

javafx tableview 列调整大小问题

[英]javafx tableview column resizing issue

我正在使用 Sceenbuilder 来设计 GUI。 在 TableView 我有 9 列。 除了一个相同的宽度之外的所有列都可以。 这是来自 sceenbuilder 的屏幕截图: 在此处输入图片说明

我只希望列“串行”的宽度更小。 所以我将调整大小策略设置为 CONSTRAINED_RESIZE_POLICY。 并且仅禁用仅针对“串行”列调整大小并将其设置为固定大小(例如 50)。

在 sceenbuilder 预览中它工作正常,但是当我编译代码时,我在最后得到一个空列,如下所示: 在此处输入图片说明

只有在使用鼠标调整任何列的大小后,它才会自动获得所需的宽度。 我的问题是为什么首先需要使用鼠标拖动任何列? 这是我不想要的!。

我该如何解决?

我的程序也有同样的问题,我就是这样解决的。

TableView保留为CONSTRAINED_RESIZE_POLICY 然后,在需要特定widthTableColumn ,将maxminpref大小设置为相同的大小。 这样,它不会比你的尺寸大也不会小。

编辑1:

在玩弄它之后,我确定您只需要将TableColumnmax width设置为您想要的任何大小,因为这将在表格标题上分配适当的空间,但我下面的示例仍然有效。

下面的例子:

环境文件

<?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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM