2014-02-18 31 views
4

我無法讓我的HBox中的元素增長,所以我從java2s.com下載了以下示例代碼。它作爲一個最小的不工作的例子:JavaFX:setHgrow(...)不起作用

package fxtest; 

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.Priority; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class Fxtest extends Application { 
    public static void main(String[] args) { 
     Application.launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle(""); 
     Group root = new Group(); 
     Scene scene = new Scene(root, 600, 250, Color.WHITE); 

     HBox hbox = new HBox(); 
     TextField field = new TextField(); 
     HBox.setHgrow(field, Priority.ALWAYS); 
     hbox.getChildren().addAll(new Label("Search:"), field, new Button("Go")); 


     root.getChildren().add(hbox); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

結果看起來like this

如果我理解正確,TextField應該會增長,不是嗎?

我的Java版本爲1.7.0_51

我的JavaFX版本是51年2月2日,B13

你知道爲什麼它不工作/我有什麼做的? 謝謝!

回答

7

爲什麼HBox.setHgrow

您使用Group的場景和團體的根節點不工作是不是可以調整大小,因此組的大小不調整到場景的大小。

一個集團將承擔其子女的集體邊界,而不是 可以直接調整大小。

默認情況下,集團將「自動調整大小」的管理 可調整大小的孩子到佈局中的首選大小通過

在一般情況下,你很少想使用一個組作爲根節點一個場景。

如何解決它

使用場景中的唯一可調整大小的節點(Pane子類或Control子類)。

樣品

替換您的起動方法具有低於其去除組根節點而是使HBox中場景的根節點的方法:調整大小後

public void start(Stage primaryStage) { 
    HBox hbox = new HBox(10); 
    TextField field = new TextField(); 
    HBox.setHgrow(field, Priority.ALWAYS); 
    hbox.setAlignment(Pos.BASELINE_LEFT); 
    hbox.getChildren().addAll(
     new Label("Search:"), field, new Button("Go") 
    ); 
    hbox.setPadding(new Insets(10)); 

    Scene scene = new Scene(hbox, 600, 250, Color.WHITE); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

輸出所述樣品的該窗口(您可以看到搜索文本字段根據需要增長和縮小以適合可用空間):

grow

shrink

2

jewelsea爲給出的例子提供了正確的答案;感謝那!

它幫助我找出一個類似症狀的問題,但另一個根。 如果使用ScrollPanes,你需要設置

scrollPane.setFitToHeight(true); 
    scrollPane.setFitToWidth(true); 

,以獲得所需的長功效。