2016-10-23 3 views
0

Sceenbuilder를 사용하여 GUI를 디자인하고 있습니다. TableView에는 9 개의 열이 있습니다. 같은 너비를 제외한 모든 열은 괜찮습니다. 다음은 sceenbuilder의 스크린 샷입니다. enter image description herejavafx 테이블 뷰 열 크기 조정 문제

"직렬"열의 너비가 더 작아야합니다. 그래서 resize 정책을 CONSTRAINED_RESIZE_POLICY로 설정했습니다. 그리고 "직렬"열에 대해서만 크기 조정을 비활성화하고 고정 된 크기 (예 : 50)로 설정하십시오. sceenbuilder 미리보기에서

그것은 잘 작동하지만 난 코드를 컴파일 할 때이 같은 끝에 빈 열을 얻을 : enter image description here

만 자동 폭을 원하는됩니다 마우스를 사용하는 열 크기를 조정 한 후. 내 질문은 왜 그것은 먼저 마우스를 사용하여 모든 열을 드래그해야합니까? 이것은 내가 싫어하는 것입니다!.

어떻게 해결할 수 있습니까?

답변

0

내 프로그램에서 동일한 문제가 발생했으며이를 수정했습니다.

TableViewCONSTRAINED_RESIZE_POLICY으로 둡니다. 그런 다음 TableColumn에서 특정 width을 원할 경우 max, minpref 크기를 같은 크기로 설정하십시오. 이렇게하면 크기가 더 크지 않고 크기보다 작아집니다.

편집 1 :

그것으로 주위를 연주 후, 나는이 적절한를 할당합니다 당신은, 당신이 원하는 어떤 크기 당신의 TableColumn에의 max width을 설정해야 결정했습니다 공간을 테이블 헤더에, 아래 예제에서는 여전히 작동합니다. 아래

예 :

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