首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX:分隔栏不相等

JavaFX:分隔栏不相等
EN

Stack Overflow用户
提问于 2014-02-20 10:31:22
回答 1查看 672关注 0票数 1

我想要构建一个javafx应用程序,它包括关于整个场景的3大列。列应该是可调整大小的,所以我使用了拆分窗格。我在分隔窗格中添加了3个边框,每个边框都具有相同的首选宽度(场景的总体宽度为3840宽度,因此每一列的宽度为1280 )。但是,当我启动应用程序时,中间边框比另两个边框小。它不按1280宽度缩放。

那么,如何处理拆分窗格没有缩放边框并使用首选宽度的问题?

更新:-我找到了一个很好的解决方案,这使得解决方案从user3249346动态。在添加或删除列之后,可以调用:

代码语言:javascript
复制
ObservableList<SplitPane.Divider> dividers = splitPane.getDividers();
for (int i = 0; i < dividers.size(); i++) {
    dividers.get(i).setPosition((i + 1.0) / 3);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-20 12:08:47

当我使用三列Split窗格最大化并恢复屏幕时,我尝试了这种方法。重要的是Platform.runLater

代码语言:javascript
复制
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);
}
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21905043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档