2012-10-17 13 views
10

Podczas korzystania z TableView w JavaFX 2, wydaje się, że magicznie dodano jedną kolumnę zamiast zmieniać jej rozmiar. Zobacz poniższy zrzut ekranu.TableView ma więcej kolumn niż podano

Czego bym oczekiwał/chciał: Obydwie kolumny mają 50% powierzchni, nie należy dodawać trzeciej (bez nazwy/pustej) kolumny.

enter image description here

Utworzone przy użyciu Scene Builder, kod 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

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

+0

Dzięki Uluk, że pomogło! Opublikuj jako odpowiedź, aby wybrać ją jako właściwą :-) Czy masz jakiś pomysł na to dziwne zachowanie? –

+2

Dzieje się tak, ponieważ domyślne zachowanie szerokości kolumny dostosowuje kolumnę do najszerszego elementu w kolumnie. W ten sposób puste miejsce nie zostało wykorzystane. –

Odpowiedz

26

Korzystając

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

W ten sposób można zapewnić, że dodatkowa przestrzeń w nagłówku kolumny tabeli zostaną rozdzielone pomiędzy kolumny. W tym rozkładzie oczywiście bierze się pod uwagę "max i min szerokości" kolumn.
Domyślnie TableView.UNCONSTRAINED_RESIZE_POLICY jest używany tam, gdzie tablecolumns będą początkowo miały preferowaną szerokość.

+0

Czy możesz to zrobić również w FXML? – user3111525

+0

@ user3111525, tak. Spróbuj jako ''. Powinien działać, ale nie próbował. –

+0

Czy można użyć preferowanej szerokości, ale nie wyświetlać dodatkowej kolumny po prawej? Jak połączyć UNCONSTRAINED z CONSTRAINED policy. – smalafeev

2

Odpowiedź Uluka Bly'a jest absolutnie poprawna dla kodu.

Dodatkowo, używając Scenebuilder, upewnij się, aby ustawić politykę w oknie rozwijanej Właściwości, aby takie same (ograniczone) i powinno pokazać się w pliku FXML tak:

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

to było dobre dla mi w JavaFX 2.2

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
+1

Musisz dodać tekst wyjaśniający, dlaczego jest dobry. –

Powiązane problemy