2016-10-23 141 views
0

我正在使用Sceenbuilder來設計GUI。在TableView中,我有9列。除了一個寬度相同的所有列都可以。下面是來自sceenbuilder的截圖: enter image description herejavafx tableview列調整大小問題

我只希望列「serial」的寬度更小。所以我將調整策略設置爲CONSTRAINED_RESIZE_POLICY。並且僅禁用「串行」列的大小並將其設置爲固定大小(例如50)。

在sceenbuilder預覽它工作正常,但是當我編譯代碼我得到這樣結束一個空列: enter image description here

僅使用鼠標它就會自動所需的寬度調整任何列後。我的問題是爲什麼它首先需要使用鼠標拖動任何列?這是我不想要的!

我該如何解決它?

回答

0

我對我的程序有同樣的問題,我用這種方法修復了它。

TableView保留爲CONSTRAINED_RESIZE_POLICY。然後,在TableColumn上,您需要某個width,將max,minpref大小設置爲相同大小。這樣,它不會更大,也不會比你的尺寸更小。

編輯1:

玩了之後,我確定你只需要設置你的TableColumn到的max 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(); 
    } 
}