2016-03-03 67 views
1

更新:最小的,完整的和可驗證的例子JavaFX的:constrained_resize_policy不會應用到的TableView

在我的應用程序,我處理很多表視圖,並在幾乎他們每個使用constrained_resize_policy。但只有一例,我不明白爲什麼它不適用。即使沒有指定pref/min/maxWidth,我的所有列也會縮小。

的相關FXML

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

<?import javafx.geometry.*?> 
<?import java.net.*?> 
<?import javafx.geometry.* ?> 
<?import java.lang.*?> 
<?import java.util.*?> 
<?import java.net.* ?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<VBox prefHeight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxtests.FXMLController">  
    <children> 
     <TableView fx:id="regiTable" styleClass="content"> 
      <columns> 
       <TableColumn fx:id="nameCol" editable="false" resizable="false" styleClass="regimen-column" text="Name" /> 
       <TableColumn fx:id="isDefaultCol" editable="false" resizable="false" styleClass="regimen-column" text="Is default template" /> 
       <TableColumn fx:id="intervalCol" editable="false" resizable="false" styleClass="regimen-column" text="Time interval" /> 
       <TableColumn fx:id="activeOnOffCol" editable="false" resizable="false" styleClass="regimen-column" text="On/Off&#10;active" /> 
       <TableColumn fx:id="activeTWCol" editable="false" resizable="false" styleClass="regimen-column" text="Time window&#10;active" /> 
       <TableColumn fx:id="activeTICol" editable="false" resizable="false" styleClass="regimen-column" text="Time interval&#10;active" /> 
       <TableColumn fx:id="activeDoWCol" editable="false" resizable="false" styleClass="regimen-column" text="Days of week&#10;active" /> 
      </columns> 
      <columnResizePolicy> 
       <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> 
      </columnResizePolicy> 
     </TableView> 
    </children> 
</VBox> 

更新:在我的項目,相關的控制器使用setCellFactorysetCellValueFactory,但即使沒有問題仍然存在任何邏輯。這個例子的控制器是空的。

這是我在我的項目得到結果: Result with resize policy

但我希望每列具有相同的寬度,並且沒有空的空間。我錯過了什麼 ?

+0

它*可能*不相關,但是表格單元格沒有正確實現。你的'updateItem(...)'方法*必須調用'super.updateItem(item,empty);'和* must *處理所有的可能性(也就是你需要調用setGraphic(null)'if item == null')。這可能是因爲未能調用超類方法意味着單元格尺寸不正確,導致列大小和佈局失敗。 –

+0

(另外,如果使用lambda表達式,可以減少大量代碼的數量,但不會丟失可讀性。) –

+0

感謝您指出@James_D,但不幸的是,它並未解決問題。無論如何,我會牢記這一點,在這些情況下,我總是「忘記」稱呼「超級」。 關於lambda表達式,我會喜歡使用它們,但由於項目限制(多平臺框架),我現在不能使用它們,因爲它們不受支持:( – Jacks

回答

0

至少有一列應該調整大小

+0

刪除第一列的'resizable =「false」'沒有解決它。 – Jacks

+0

,如果你將刪除所有resizable =「false」並設置prefWidth =「 - 1」? – user3718614

+0

也沒有解決它。另外,在我的項目的另一個視圖中,我將所有列設置爲'resizable =「false」',除了一個,它可以工作。你在回答之前是否嘗試了你的建議? – Jacks