从内部更改窗格的内容?

时间:2015-09-20 09:11:27

标签: java javafx

如果我有一个扩展具有.setContent(Pane pane)方法的超类的类,我是否可以在类中更改pane

例如:当按下示例按钮时,我想将内容设置为stackPane2。 (this.setContent(stackPane2);)。

public class AClass extends SomeClass{
    public AClass(){
        super();
        HBox hBox = new HBox();
        Button exampleButton = new Button("Example");
        exampleButton.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent event) {
                //Change the content here
            }
        });


        StackPane stackPane1 = new StackPane();
        stackPane1.getChildren().addAll(hBox);

        StackPane stackPane2 = new StackPane();
        stackPane2.getChildren().add(/*Some other stuff*/);

        this.setContent(stackPane1);
    }
}

可以这样做吗?如果是这样,怎么样?否则可能是一种可能的解决方法。

1 个答案:

答案 0 :(得分:0)

我不确定我是否遗漏了某些内容,但我认为如果您没有更多代码,最简单的方法是将stackPane1stackPane2声明为最终字段,然后从按钮监听器中调用setContent

public class AClass extends SomeClass{

private final StackPane stackPane1;
private final StackPane stackPane2;

public AClass(){
    super();
    HBox hBox = new HBox();
    Button exampleButton = new Button("Example");
    exampleButton.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent event) {
            if (somenthingHapper()) {
                this.setContent(stackPane1);
            } else {
                this.setContent(stackPane2);
            }
        }
    });


    stackPane1 = new StackPane();
    stackPane1.getChildren().addAll(hBox);

    stackPane2 = new StackPane();
    stackPane2.getChildren().add(/*Some other stuff*/);

    this.setContent(stackPane1);
}
}