2014-02-20 64 views
1

我想構建一個javafx應用程序,它由3個關於整個場景的大列組成。列應該可以調整大小,所以我使用了分割面。我向分割面添加了3個邊框,每個都有相同的首選寬度(場景整體寬度爲3840,因此每列寬度爲1280)。但是當我啓動應用程序時,中間的邊界窗格比另外兩個小。它不在1280寬度上縮放。JavaFX:Splitpane列不等於

那麼我怎樣才能管理的splitpane不縮放borderpanes和使用首選的寬度?

更新:我找到了一個很好的解決方案,這使得解決方案從user3249346動態。添加或刪除列後,你可以調用這個:

ObservableList<SplitPane.Divider> dividers = splitPane.getDividers(); 
for (int i = 0; i < dividers.size(); i++) { 
    dividers.get(i).setPosition((i + 1.0)/3); 
} 

回答

2

我嘗試這樣做,這作品時,我和最大化與Splitpane的三列還原畫面。 重要的是Platform.runLater

import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.SplitPane; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class SplitPaneTest extends Application { 
@Override public void start(Stage stage) { 
    final SplitPane sp = new SplitPane(); 
    final StackPane sp1 = new StackPane(); 
    Button addColumn = new Button("Add Column"); 
     // Added the below function to set the size dynamically when column is added. 
    addColumn.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent arg0) { 
      StackPane temp = new StackPane(); 
      temp.getChildren().add(new Button("New Column")); 
      sp.getItems().add(temp); 
      int divCount = sp.getDividerPositions().length; 
      double equalSize = 1.0/(divCount+1); 
      double divPosValues[] = new double[divCount]; 
      for(int count=1; count<divCount+1; count++) { 
       divPosValues[count-1] = equalSize*count; 
      } 
      sp.setDividerPositions(divPosValues); 
     } 
    }); 

    sp1.getChildren().add(addColumn); 
    final StackPane sp2 = new StackPane(); 
    sp2.getChildren().add(new Button("New Button")); 
    final StackPane sp3 = new StackPane(); 
    sp3.getChildren().add(new Button("New Button")); 
    sp.getItems().addAll(sp1, sp2, sp3); 
    sp.setDividerPositions(0.33f, 0.63f, 0.93f); 

    Scene scene = new Scene(sp, 400, 400); 
    stage.setScene(scene); 

    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
      sp.setDividerPositions(0.3f, 0.6f, 0.9f); 
     } 
     }); 
    stage.show(); 
} 

public static void main(String[] args) { 
    Application.launch(args); 
} 
} 
+0

好吧,這適用於3列thx。但是如果動態地添加或刪除列,它將不起作用。 – AKR

+0

Very Intresting :)我編輯了上面的代碼,嘗試在列添加時動態設置divider位置。我認爲這是一個骯髒的解決方案..但它的工作.. – user3249346