Я использую tableview в javafx, и первый столбец занимает много места. Иногда столбцы tableview работают нормально, а иногда нет. Я динамически создаю столбцы и добавляю их в tableview. Я использую политику ограниченного изменения размера.
Используется JDK 1.8. Используется JavaFx 8. Пользовательский интерфейс основан на F XML.
Ниже приведен пример кода, который можно использовать для создания проблемы. Обратите внимание, что иногда ширина столбца соответствует ожидаемой, а иногда первый столбец занимает много места. Такое же поведение не всегда с одним и тем же кодом. Минимум 3 файла, необходимых с минимальным кодом для приложения на основе f xml:
Основной класс
public class StackOverFlowQuestion extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
Screen screen = Screen.getPrimary();
Rectangle2D bounds = screen.getVisualBounds();
stage.setWidth(bounds.getWidth());
stage.setHeight(bounds.getHeight());
stage.setMaximized(true);
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Класс контроллера
public class FXMLDocumentController implements Initializable {
@FXML
private TableView tableview;
private ObservableList<ObservableList<String>> data;
@Override
public void initialize(URL url, ResourceBundle rb) {
buildData();
}
public void buildData() {
data = FXCollections.observableArrayList();
/**
* ********************************
* TABLE COLUMN ADDED DYNAMICALLY * ********************************
*/
for (int i = 0; i < 11; i++) {
//We are using non property style for making dynamic table
final int j = i;
TableColumn col = new TableColumn("Column No." + i);
col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
return new SimpleStringProperty(param.getValue().get(j).toString());
}
});
tableview.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
tableview.getColumns().addAll(col);
}
/**
* ******************************
* Data added to ObservableList * ******************************
*/
for (int j = 0; j < 10; j++) {
//Iterate Row
ObservableList<String> row = FXCollections.observableArrayList();
for (int i = 0; i < 11; i++) {
//Iterate Column
row.add("Long Data to exceed width " + j + " " + i);
}
data.add(row);
}
tableview.setItems(data);
//FINALLY ADDED TO TableView
}
}
F XML Документ
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="700.0" prefWidth="1300.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171" fx:controller="stackoverflowquestion.FXMLDocumentController">
<children>
<VBox layoutX="341.0" layoutY="27.0" prefHeight="538.0" prefWidth="1300.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="10.0">
<children>
<TableView fx:id="tableview" prefHeight="200.0" />
</children>
</VBox>
</children>
</AnchorPane>
Ниже приведено фактическое изображение из проекта.
Кто-нибудь может помочь?