2016-12-17 5 views
0

多分疑問な質問かもしれませんが、それを解決することはできませんでした。Stringを持つJavaFx要素を参照する

私はJavaFx AnchorPaneを持っており、そのスタイルを変更したいと思います。しかし、私は別の場所からペインの名前を取得し、それを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

確かにそれを行うための一つの方法は、AnchorPaneに文字列をマップする静的な地図のいくつかの種類を持っていることです。こうすることで、パネルの名前を取得すると、簡単にアクセスして通常の操作を行うことができます。

0

Nodeidが上書きされないと仮定すると、fx:idが使用されます。あなたがコントローラにFXMLのルートを注入する場合はそのため、ノードを見つけるためにlookupを使用することができます。

@FXML 
private Parent root; 

@FXML 
private void changePaneStyle(ActionEvent actionEvent) { 
    root.lookup("#"+Name).setStyle("-fx-background-color: red;"); 
} 

代わりにあなたはFXMLをロードした後fx:idObject Sを含む、FXMLLoadernamespaceを使用することができます、しかし、あなたはロード後のコントローラにこのデータを渡す必要があるでしょう:

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;"); 
} 
FXMLLoader loader = new FXMLLoader(url); 
Parent root = loader.load(); 
loader.<Controller>getController().setNamespace(loader.getNamespace()); 
関連する問題