#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();
}
}