2015-02-10 127 views

回答

10

如果通過「表格可擴展但不是列」,則表示用戶不應該調整列的大小,然後在每列上調用setResizable(false);

要使列相對於整個表格寬度保持指定的寬度,請綁定列的prefWidth屬性。

SSCCE:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

public class TableColumnResizePolicyTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     TableView<Void> table = new TableView<>(); 
     TableColumn<Void, Void> col1 = new TableColumn<>("One"); 
     TableColumn<Void, Void> col2 = new TableColumn<>("Two"); 
     table.getColumns().add(col1); 
     table.getColumns().add(col2); 

     col1.prefWidthProperty().bind(table.widthProperty().multiply(0.3)); 
     col2.prefWidthProperty().bind(table.widthProperty().multiply(0.7)); 

     col1.setResizable(false); 
     col2.setResizable(false); 

     primaryStage.setScene(new Scene(new BorderPane(table), 600, 400)); 
     primaryStage.show(); 
    } 

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

我認爲這是無法在FXML中管理的,這有點令人傷心。就像設置一個'widthWeight'什麼的。 – codepleb 2016-09-02 12:58:29

+3

@TrudleR我認爲你可以在FXML中做到這一點,不是嗎? ''。還沒有嘗試過,但我不明白爲什麼它不起作用。 – 2016-09-02 13:02:54

+0

這聽起來非常有趣,你在那裏做什麼。但它看起來像tableColumn無法在FXML中相乘。 :) – codepleb 2016-09-02 13:09:59

11

TableView小號columnResizePolicy是你的朋友:

如果設置TableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY)所有列將平均調整,直到達到TableView的最大寬度。

此外,您可以編寫自己的策略:該策略僅爲Callback,其中ResizeFeatures作爲輸入來自您可以訪問TableColumn的位置。

+0

我已經設置。該表正在適當調整大小。但問題是我無法設置列寬。如果我調整大小,最後會顯示另一個空欄。 – NaveenBharadwaj 2015-02-10 10:15:24

+0

然後,您應該考慮發佈顯示您的問題的MCVE(http://stackoverflow.com/help/mcve)。 – eckig 2015-02-10 10:26:01