2017-12-10 6 views
0

私はEventHandlerのために、このようなコードを持っているのビューコントローラから変数にアクセスすることはできません。のJavaFX - EventHandlerの

public EventHandler<MouseEvent> handleMouseClickedEvent = new EventHandler<MouseEvent>() { 
    @Override 
    public void handle(MouseEvent event) { 
     // Grab the Pane from the event. 
     Pane p = (Pane) event.getSource(); 

     // Set the colour of that pane. 
     String colour = ViewController.brushColourPicker.getValue().toString(); 
     p.setStyle("-fx-background-color: " + colour); 
    } 
}; 

brushColourPickerイベントハンドラ内で静的コンテキストからアクセスすることはできません - 私は、変数、静的でを作る場合私のビューコントローラ、私はNPEを取得します。 getterは静的でなければならないので、私の変数へのアクセスはできません。

ご協力いただきまして誠にありがとうございます。お使いのコントローラ(複数可)参照(複数可)を格納するクラスを作成し、

まず:1は、次の操作を行うことができ、他のクラスからのコントローラのビューの要素にアクセスするために

+1

投稿する[mcve]。 – user1803551

+0

したがって、関連するFXMLをロードして表示したときに作成された実際のコントローラ*インスタンス*からアクセスする必要があります。 –

答えて

1

。その後

public class Controllers { 

     private static MainController mainController; 

     public static MainController getMainController() { 
      return mainController; 
     } 

     public static void setMainController(MainController mainController) { 
      Controllers.mainController = mainController; 
     } 

     public static void setMainControllerLoader(FXMLLoader mainControllerLoader) { 
      Controllers.mainController = mainControllerLoader.getController(); 
     } 
} 

、次の操作を行います。

public class MainController 
{ 
    // view elements.. 

    public void initialize() 
    { 
     Controllers.setMainController(this); 
     // ... 
    } 
} 

または:

 Parent root; 
     FXMLLoader loader; 
     try { 
      loader = new FXMLLoader(getClass().getClassLoader().getResource("path/to/yourFxml.fxml")); 
      root = loader.load(); 
      Controllers.setMainControllerLoader(loader); 
     } catch (IOException e) { 
      // Failed to load fxml 
     } 
     Stage stage = new Stage(); 
     stage.setScene(new Scene(root, 600, 400)); 

を今、あなたはどのクラスからControllers.getMainController()を呼び出すことができ、例えば、コントローラのビューの要素にアクセスしますControllers.getMainController().mainPane.setVisible(false)

+1

完璧に働いて、ありがとう! – tobycode

+0

聞いてうれしい、歓声! –