2015-09-20 5 views
1

Если у меня есть класс, который расширяет суперкласс, который имеет метод .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); 
    } 
} 

Это можно сделать? Если да, то как? В противном случае это может быть возможным обходным путем.

ответ

0

Я не уверен, если я что-то отсутствует, но я думаю, что самый простой способ, если у вас нет какой-то много кода объявить stackPane1 и stackPane2 в качестве конечных полей, а затем вызвать 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); 
} 
} 
Смежные вопросы