1

[ペインの追加]ボタンをクリックしてXYChartにSplitPaneを追加できますが、正常に機能します。

次に、[ペインの削除]ボタンをクリックしてSplitPaneを削除します。

これが完全なコードです

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);
        }
      }
    });
}
}

どんな助けでも本当にありがたいです。

4

1 に答える 1

2

内側のペインのリストを保存し、このリストに基づいてそれらを削除できます。

    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()を決定するためのトリッキーで信頼性の低いコードが必要になる場合があります。

于 2012-07-17T10:38:30.103 に答える