2012-10-17 27 views
10

Khi sử dụng TableView trong JavaFX 2, có vẻ như được thêm một cột kỳ diệu thay vì thay đổi kích thước các cột hiện có. Vui lòng xem ảnh chụp màn hình sau.TableView có nhiều cột hơn được chỉ định

Điều tôi mong đợi/muốn: Cả hai cột phải có 50% không gian, không được thêm cột thứ ba (chưa đặt tên/trống).

enter image description here

Created sử dụng Scene Builder, mã 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

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

+0

Cảm ơn Uluk, đã giúp! Xin vui lòng gửi như câu trả lời, vì vậy tôi có thể chọn nó như là một trong những chính xác :-) Bạn có bất kỳ ý tưởng cho hành vi kỳ lạ này? –

+2

Điều này xảy ra vì hành vi chiều rộng cột mặc định điều chỉnh cột thành phần tử rộng nhất trong cột. Vì vậy, không gian trống còn lại không được sử dụng. –

Trả lời

26

Sử dụng

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

Bằng cách này bạn đảm bảo rằng không gian thêm trong tiêu đề cột bảng sẽ được phân phối trong Các cột. Trong phân phối này, các chiều rộng tối đa và tối đa của cột được tính đến tất nhiên.
Theo mặc định, TableView.UNCONSTRAINED_RESIZE_POLICY được sử dụng trong trường hợp các tablecolumn sẽ có chiều rộng ưa thích ban đầu.

+0

Bạn có thể làm điều đó trong FXML không? – user3111525

+0

@ user3111525, vâng. Hãy thử làm ''. Nó sẽ hoạt động, mặc dù không thử. –

+0

Có thể sử dụng chiều rộng ưa thích nhưng không hiển thị cột bổ sung ở bên phải không? Giống như kết hợp UNCONSTRAINED với chính sách CONSTRAINED. – smalafeev

2

Câu trả lời của Uluk Bly hoàn toàn chính xác cho mã.

Bên cạnh đó, sử dụng Scenebuilder, hãy chắc chắn để thiết lập các chính sách trong cửa sổ thả xuống Properties để cùng (bị hạn chế), và nó sẽ hiển thị trong tập tin FXML bạn như vậy:

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

Đó là tốt cho tôi trong JavaFX 2,2

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
+1

Bạn phải thêm một số văn bản giải thích tại sao nó lại tốt. –

Các vấn đề liên quan