2015-10-14 279 views
0

我想使用2列製作一個特定佈局的窗口,但我不能完全按照我想要的方式使它工作。JavaFX GridPane列大小調整

首先,一些簡單的示例代碼:

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.Spinner; 
import javafx.scene.layout.GridPane; 
import javafx.stage.Stage; 

public class GridTest extends Application { 
    @Override 
    public void start(final Stage stage) throws Exception { 
     final GridPane grid = new GridPane(); 
     grid.setHgap(5); 
     grid.setVgap(5); 
     grid.setPadding(new Insets(10, 10, 10, 10)); 

     grid.add(new Label("Something:"), 0, 0); 
     final Spinner<?> s1 = new Spinner<>(); 
     grid.add(s1, 1, 0); 

     grid.add(new Label("Another thing:"), 0, 1); 
     final Spinner<?> s2 = new Spinner<>(); 
     grid.add(s2, 1, 1); 

     final Button b = new Button("A button"); 
     grid.add(b, 0, 2, 2, 1); 

     stage.setScene(new Scene(grid, 400, 150)); 
     stage.show(); 
    } 

    public static void main(final String... args) { 
     launch(args); 
    } 
} 

下面是我想:

  • 的微調按鈕應該使用所有可用的寬度
  • 標籤應始終保持他們的首選寬度,從不改變它們的大小
  • 當我使窗口更寬時,旋鈕和按鈕應該增長
  • 當我使窗口窄,微調按鈕應該縮小,但不低於其首選寬度

我試圖用種種侷限,但我不能把一切工作的權利。我認爲我發現的主要問題是,在讓紡紗廠使用可用寬度後,他們在縮小窗口時拒絕縮小。

我在Linux中使用Oracle JDK 1.8.0_60。

回答

1

這似乎是Spinner bug,如果我用TextField代替,我會得到更好的結果。

例子:

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Priority; 
import javafx.stage.Stage; 

public class GridTest extends Application { 
    @Override 
    public void start(final Stage stage) throws Exception { 
     final GridPane grid = new GridPane(); 
     grid.setHgap(5); 
     grid.setVgap(5); 
     grid.setPadding(new Insets(10, 10, 10, 10)); 

     ColumnConstraints cc = new ColumnConstraints(); 
     cc.setMinWidth(GridPane.USE_PREF_SIZE); 
     grid.getColumnConstraints().add(cc); 
     cc = new ColumnConstraints(); 
     cc.setMinWidth(GridPane.USE_PREF_SIZE); 
     cc.setHgrow(Priority.ALWAYS); 
     grid.getColumnConstraints().add(cc); 

     grid.add(new Label("Something:"), 0, 0); 
     final TextField t1 = new TextField(); 
     grid.add(t1, 1, 0); 

     grid.add(new Label("Another thing:"), 0, 1); 
     final TextField t2 = new TextField(); 
     grid.add(t2, 1, 1); 

     final Button b = new Button("A button"); 
     b.setMaxWidth(Double.MAX_VALUE); 
     grid.add(b, 0, 2, 2, 1); 

     stage.setScene(new Scene(grid, 400, 150)); 
     stage.show(); 
    } 

    public static void main(final String... args) { 
     launch(args); 
    } 
} 

但更換TextField s的Spinner S和所有的地獄破散...