2016-10-23 5 views
0

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

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

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

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

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

ответ

0

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

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

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