Первый столбец Tableview занимает много места в javafx 8 - PullRequest
1 голос
/ 06 мая 2020

Я использую 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>

Ниже приведено фактическое изображение из проекта.

tableview image

Кто-нибудь может помочь?

...