проблема с изменением размера столбца tableview в javafx

#java #javafx

#java #javafx

Вопрос:

Я использую Sceenbuilder для разработки графического интерфейса. В TableView у меня есть 9 столбцов. Все столбцы, кроме одного, одинаковой ширины, в порядке. Вот скриншот из sceenbuilder: введите описание изображения здесь

Я только хочу, чтобы столбец «serial» был меньше по ширине. Поэтому я установил политику изменения размера в CONSTRAINED_RESIZE_POLICY. И отключите изменение размера только для столбца «serial» и установите для него фиксированный размер (например, 50).

В предварительном просмотре sceenbuilder все работает нормально, но когда я компилирую код, в конце я получаю пустой столбец, подобный этому: введите описание изображения здесь

Только после изменения размера любого столбца с помощью мыши он автоматически приобретает желаемую ширину. Мой вопрос в том, почему сначала требуется перетащить любой столбец с помощью мыши? Это то, чего я не хочу!.

Как я могу это решить?

Ответ №1:

У меня была такая же проблема в моей программе, и я исправил ее таким образом.

Оставьте TableView как CONSTRAINED_RESIZE_POLICY . Затем, для TableColumn того width , max которого вы хотите, установите min , pref и,, размер на тот же размер. Таким образом, он будет не больше и не меньше вашего размера.

Редактировать 1:

Поиграв с этим, я решил, что вам нужно всего лишь установить для max width вашего TableColumn файла тот размер, который вы хотите, чтобы он был, поскольку это выделит соответствующее пространство в заголовке таблицы, хотя мой пример ниже все еще работает.

Пример ниже:

Environment.fxml

 <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.BorderPane?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.91" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <TableView prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
        <columns>
          <TableColumn prefWidth="75.0" text="First Name" />
          <TableColumn prefWidth="75.0" text="Last Name" />
            <TableColumn prefWidth="75.0" text="Email Address" />
            <TableColumn maxWidth="50.0" minWidth="50.0" prefWidth="50.0" text="Age" />
            <TableColumn maxWidth="50.0" minWidth="50.0" prefWidth="50.0" text="Height" />
        </columns>
         <columnResizePolicy>
            <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
         </columnResizePolicy>
      </TableView>
   </center>
</BorderPane>
  

Главная. В моем примере fxml файл находится в каталоге с именем fxml . Пожалуйста, измените код для этого.

 import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class Main extends Application {


    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws IOException {

        FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("fxml/Environment.fxml"));
        Parent root = loader.load();
        Scene scene = new Scene(root,800,800);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}