2014-02-20 4 views
1

Я хочу создать приложение javafx, состоящее из 3 больших столбцов всей сцены. Столбцы должны быть изменены, поэтому я использовал splitpane. Я добавил 3 пограничных поля в разделительную панель, каждая с той же предпочтительной шириной (сцена общей ширины 3840, поэтому каждый столбец шириной 1280). Но когда я запускаю приложение, средний borderpane меньше, чем два других. Он не масштабируется по ширине 1280.JavaFX: столбцы Splitpane не равны

Как я могу управлять тем, что splitpane не масштабирует граничные области и использует предпочтительную ширину?

Обновление: Я нашел хорошее решение, которое делает решение от 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 колонки, ТНХ. Но это не сработает, если динамически добавить или удалить столбец. – AKR

+0

Очень интересный :) Я изменил код выше, чтобы попытаться установить положение разделителя динамически при добавлении столбца. Я думаю, что это грязное решение. Но это работает. – user3249346

Смежные вопросы