2013-02-07 11 views
14

2つのラベルとボタンを表示する単純なGridPaneがありますが、親StackPaneに合わせることができません。私はどのようにしてそれがどんなコンテナに入ってもそれを満たすように、どうしたらいいのですか?JavaFX - 親にフィットするようにGridPaneを取得

GridPane g = new GridPane(); 
    g.add(new Label("Categories"),0,0); 
    g.add(new Label("Content"),1,0);   
    Button newCat = new Button("New Category"); 
    newCat.setOnAction(new EventHandler<ActionEvent>() { 
     @Override public void handle(ActionEvent e) { 
      System.out.println("Clicked"); 
     } 
    });  
    g.add(newCat,0,1); 
    g.setGridLinesVisible(true); 
    StackPane root = new StackPane(); 
    root.getChildren().add(g);   
    Scene scene = new Scene(root, 300, 250); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

UIは本当に私の強みではありません。

答えて

0

GridPaneをStackPaneに配置する代わりに、GridPaneをHBoxまたはVBoxに追加する必要があります。 Gridpaneを調整する方がより便利です。ところで、まだg.setPrefSize(arg0、arg1)のようないくつかのメソッドがあります。それに応じて高さと幅を設定します。

+0

が、推奨サイズを設定することによって、それはdoesnのそれを親にスケールするだけで、FXが使用しようとするサイズを設定しますが、他のアイテムのサイズを変更しないので問題が解決するとは信じられませんが、HBoxを入れようとします。私は試してみよう^^ –

+0

申し訳ありませんが、HBoxやVBoxのいずれかがGridPanesのサイズに影響を与えました。 –

+0

@JohnMikaelGundersen tryこのようにグリッドの制約を調整してください。 [リンク] http://pastebin.com/rA0Ch8ET –

0

明らかではありませんが、あなたのGridPaneは既に親コンテナと同じくらい大きいと思います。 "Scene scene = new Scene(root、300、250);"の前に次の2行のコードを追加すると、何が起こっているのかを確認できるはずです。

root.setStyle("-fx-background-color: yellow;"); 
g.setStyle("-fx-border-color: blue;"); 
+0

私は見ることができる限り親に拡大しません –

+0

GridPaneはどのように再配布するのか分かりません追加の幅と高さ。それを定義する必要があります。最初の行が余分な垂直スペースを占め、2番目の列が余分な水平スペースをすべて占めるようにしますか?代わりにTableViewを使用することを検討しましたか? – ytw

10

あなたはこのlink割合サイジングについて、特に一部が表示されます。あなたは2つだけの列を持っている場合、私は、コードが動作することを発見した:

GridPane grid = new GridPane(); 
/* your code */ 
ColumnConstraints column1 = new ColumnConstraints(); 
column1.setPercentWidth(50); 
grid.getColumnConstraints().add(column1); 
+1

これは絶対に動作します。私のグリッドペインが親に合っていなかったので私は夢中でしたが、今はそうです。そしてメモ:これは2つ以上のcoulumsでも機能します、ちょうどそれに応じて値を調整してください! –

+0

ありがとう、私は答えにあなたのメモを追加しました。 – Videl

8

誰もが答えを探しています場合には、これはそれが私のために働いていた方法です:

@Override 
public void start(Stage stage) throws Exception { 
    stage.setTitle("Window title"); 
    GridPane grid = new GridPane(); 

    gridSetup(grid); // Building my grid elements here (2 columns) 

    // Setting columns size in percent 
    ColumnConstraints column = new ColumnConstraints(); 
    column.setPercentWidth(30); 
    grid.getColumnConstraints().add(column); 

    column = new ColumnConstraints(); 
    column.setPercentWidth(70); 
    grid.getColumnConstraints().add(column); 

    grid.setPrefSize(WINDOW_WIDTH, WINDOW_HEIGHT); // Default width and height 
    grid.setMaxSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE); 

    Scene scene = new Scene(grid, WINDOW_WIDTH, WINDOW_HEIGHT); 
    stage.setScene(scene); 
    stage.show(); 
} 

をこの設定でグリッドはウィンドウのすべての領域を取り、ウィンドウとともに自動的にサイズ変更されます。

3

のは2列と3​​行を持っている、あなたは、列と行1対1の大きさのプロパティを定義することができます。レイアウトを想定してみましょう:私は知っている

<GridPane 
    xmlns:fx="http://javafx.com/fxml/1"  
    id="gridPane" 
    prefHeight="768.0" 
    prefWidth="1024.0">  

    <gridLinesVisible>true</gridLinesVisible> 
    <columnConstraints> 
     <ColumnConstraints percentWidth="20" /> 
     <ColumnConstraints percentWidth="80" />   
    </columnConstraints> 

    <rowConstraints> 
     <RowConstraints minHeight="50"/> 
     <RowConstraints percentHeight="80"/> 
     <RowConstraints minHeight="50"/> 
    </rowConstraints> 

</GridPane> 
関連する問題