首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FX 2.x :如何删除SplitPane?

FX 2.x :如何删除SplitPane?
EN

Stack Overflow用户
提问于 2012-07-17 17:57:34
回答 1查看 172关注 0票数 1

我可以通过单击“添加窗格”按钮在XYChart中添加SplitPane,它工作得很好。

现在我想通过点击"Remove SplitPane“按钮来删除窗格。

下面是完整的代码

代码语言:javascript
复制
public class SplitPaneFxTest extends Application {

SplitPane splitPane = new SplitPane();
double    percSplit = 0.50;
int       idxSplit  = 0;
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(SplitPaneFxTest.class, args);
}

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("SplitPane Test");

    Group root = new Group();
    Scene scene = new Scene(root, 800, 650, Color.WHITE);

    //CREATE THE SPLITPANE        
    splitPane.setPrefSize(scene.getWidth(), scene.getHeight());
    splitPane.setOrientation(Orientation.VERTICAL);        

    //ADD LAYOUTS AND ASSIGN CONTAINED CONTROLS
    BorderPane upperPane = new BorderPane();
    HBox hbox = new HBox();

    Button button1 = new Button("Add Pane");
    hbox.getChildren().addAll(button1);
    upperPane.setTop(hbox);

    Button button2 = new Button("Remove Pane");
    hbox.getChildren().addAll(button2);
    upperPane.setTop(hbox);

    BorderPane lowerPane = new BorderPane();

    splitPane.getItems().addAll(upperPane);
    splitPane.setDividerPosition(idxSplit, 0.70);
    idxSplit++;

    splitPane.getItems().addAll(lowerPane);        
    idxSplit++;

    root.getChildren().add(splitPane);

    primaryStage.setScene(scene);
    primaryStage.show();

    button1.setOnAction(new EventHandler<ActionEvent>() {
    @Override public void handle(ActionEvent e) {

        BorderPane myborderpane = new BorderPane();            
        splitPane.getItems().addAll(myborderpane);

        ObservableList<SplitPane.Divider> splitDiv =  splitPane.getDividers();

        System.out.println("splitDiv.size() "+splitDiv.size());

        percSplit = 1/(double)(splitDiv.size()+1);
        for (int i = 0; i< splitDiv.size(); i++) {                
            System.out.println("i "+i+" percSplit "+percSplit);
            splitPane.setDividerPosition(i, percSplit);
            percSplit += 1/(double)(splitDiv.size()+1);
        }
      }
    });
}
}

真的很感谢任何人的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-17 18:38:30

您可以存储内部窗格的列表,并根据此列表删除它们:

代码语言:javascript
复制
    final List<Pane> panes = new ArrayList<Pane>();

    button1.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {

            BorderPane myborderpane = new BorderPane();

            //adding
            panes.add(myborderpane);

            splitPane.getItems().addAll(myborderpane);

            ObservableList<SplitPane.Divider> splitDiv = splitPane.getDividers();

            System.out.println("splitDiv.size() " + splitDiv.size());

            percSplit = 1 / (double) (splitDiv.size() + 1);
            for (int i = 0; i < splitDiv.size(); i++) {
                System.out.println("i " + i + " percSplit " + percSplit);
                splitPane.setDividerPosition(i, percSplit);
                percSplit += 1 / (double) (splitDiv.size() + 1);
            }
        }
    });

    button2.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent t) {
            if (panes.size() > 0) {
                // removing from both list and splitPane childs
                Pane toDelete = panes.remove(0);
                splitPane.getItems().remove(toDelete);
            }
        }
    });

您也可以直接从ScrollPane.getChildren()中删除窗格,但这可能涉及到棘手且不可靠的代码来确定要删除哪个窗格。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11520120

复制
相关文章

相似问题

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