引用带有String的JavaFx元素

时间:2016-12-17 22:06:35

标签: java javafx

也许是一个愚蠢的问题,但无法解决它,应该是一个快速的人,如何知道。

我有一个JavaFx AnchorPane,我想改变它的风格。但是,我从其他地方获取了Pane的名称并将其保存在String中。我该怎么办?

public class Controller{
@FXML
    private AnchorPane PaneNumber1;

@FXML 
    private void changePaneStyle(ActionEvent actionEvent){
PaneNumber1.setStyle("-fx-background-color: red;"); 
}
//this works

String Name = PaneNumber1;

// now, how can I perform the same operation as above, using this String instead of PaneNumber1

}

2 个答案:

答案 0 :(得分:0)

当然,一种方法是使用某种静态Map将String映射到AnchorPane。这样,当您获得面板名称时,您可以轻松访问它并正常执行操作。

答案 1 :(得分:0)

假设id的{​​{1}}未被覆盖,则使用Node。因此,如果将fxml的根注入控制器,则可以使用fx:id来查找节点:

lookup

或者,您可以在加载fxml后使用@FXML private Parent root; @FXML private void changePaneStyle(ActionEvent actionEvent) { root.lookup("#"+Name).setStyle("-fx-background-color: red;"); } 的{​​{1}},namespace包含FXMLLoader Object,但您需要传递此数据加载后到控制器:

fx:id
private Map<String, Object> namespace;

public void setNamespace(Map<String, Object> namespace) {
    this.namespace = namespace;
}

@FXML
private void changePaneStyle(ActionEvent actionEvent) {
    ((Node) namespace.get(Name)).setStyle("-fx-background-color: red;"); 
}