2012-10-17 11 views
10

Quando si utilizza un TableView in JavaFX 2, ci sembra essere magicamente una colonna aggiunto invece di ridimensionare quelli esistenti. Si prega di vedere il seguente screenshot.TableView ha più colonne di quanto specificato

quello che mi aspetterei/desiderare: Entrambi colonna deve avere il 50% di spazio, è aggiunta una terza colonna (senza nome/vuoto).

enter image description here

Creato usando Scena Builder, il codice FXML:

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

<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> 
    <top> 
    <TableView prefHeight="200.0" prefWidth="200.0"> 
     <columns> 
     <TableColumn prefWidth="75.0" text="Column X" /> 
     <TableColumn prefWidth="75.0" text="Column X" /> 
     </columns> 
    </TableView> 
    </top> 
</BorderPane> 
+0

Sede [http://stackoverflow.com/q/11033404/682495](http://stackoverflow.com/q/11033404/682495) –

+0

Grazie Uluk, che ha aiutato! Si prega di postare come risposta, quindi posso selezionarlo come quello corretto :-) Avete qualche idea per questo strano comportamento? –

+2

Questo accade perché il comportamento della larghezza della colonna di default regola la colonna all'elemento più largo nella colonna. Quindi lo spazio vuoto non è stato utilizzato. –

risposta

26

Usa

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

In questo modo si assicura che lo spazio extra nell'intestazione colonna della tabella sarà distribuito tra le colonne. In questa distribuzione, le larghezze massime e minime delle colonne vengono prese in considerazione.
Per default il TableView.UNCONSTRAINED_RESIZE_POLICY è usato quando le tablecolumns prenderanno il loro larghezza preferita inizialmente. La risposta di

+0

Puoi farlo anche in FXML? – user3111525

+0

@ user3111525, sì. Prova come ''. Dovrebbe funzionare, anche se non ha provato. –

+0

È possibile utilizzare la larghezza preferita ma non mostrare quella colonna aggiuntiva a destra? Come combinare UNCONSTRAINED con la politica CONSTRAINED. – smalafeev

2

Uluk Bly è assolutamente corretto per il codice.

Inoltre, utilizzando Scenebuilder, assicurarsi di impostare il criterio nella finestra a discesa Proprietà per lo stesso (Limitato), e dovrebbe apparire nel file FXML in questo modo:

<columnResizePolicy> 
    <TableView fx:constant = "CONSTRAINED_RESIZE_POLICY"/> 
    </columnResizePolicy> 
1

Questo è stato un bene per me nel JavaFX 2,2

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
+1

È necessario aggiungere del testo che spieghi perché è buono. –