2016-10-23 21 views
0

私はSceenbuilderを使ってGUIを設計しています。 TableViewに私は9列を持っています。同じ幅を除くすべての列は正常です。ここにsceenbuilderからのスクリーンショットがあります: enter image description herejavafxテーブルビュー列のサイズ変更の問題

私は、「シリアル」列の幅を小さくしたいだけです。ですから、サイズ変更ポリシーをCONSTRAINED_RESIZE_POLICYに設定しました。 「シリアル」列のサイズ変更のみを無効にし、固定サイズ(50など)に設定します。

sceenbuilderプレビューでは正常に動作しているが、私は、コードをコンパイルするとき、私はこのような終わりに空の列を取得:のみ、それは自動的に所望の幅を取得し、マウスを使って任意の列のサイズを変更した後 enter image description here

を。私の質問は、マウスを使って最初に列をドラッグする必要があるのはなぜですか?これは私がしたくないものです!

どうすれば解決できますか?

答えて

0

私のプログラムで同じ問題がありましたが、私はこの方法で修正しました。

TableViewCONSTRAINED_RESIZE_POLICYとしてください。次に、TableColumnの場合は、widthを入力し、max,min、およびprefのサイズを同じサイズに設定します。この方法では、それはあなたのサイズより大きくなくなくなります。

編集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(); 
    } 
} 
関連する問題