也许是一个愚蠢的问题,但无法解决它,应该是一个快速的人,如何知道。
我有一个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
}
答案 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;");
}