问题描述
我的EventHandler的代码如下:
I have code that looks like this for my 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);
}
};
无法从EventHandler中的静态上下文访问
brushColourPicker
-如果在视图控制器中将变量设为静态,则会得到NPE.我也不能使用吸气剂,因为该吸气剂必须是静态的,这会阻止对我的变量的访问.
brushColourPicker
cannot be accessed from the static context within the EventHandler - if I make the variable static in my view controller, I get NPEs. I also cannot use a getter, as the getter has to be static, which prevents access to my variable.
非常感谢您的帮助.
推荐答案
为了从其他类访问控制器的视图元素,可以执行以下操作:
In order to access the view elements of a controller from other classes one can do the following:
首先,创建一个类来存储您的Controller引用.
First, create a class to store your Controller(s) reference(s).
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)
Now you can call Controllers.getMainController()
from any class and access the controller's view elements e.g. Controllers.getMainController().mainPane.setVisible(false)
这篇关于JavaFX-无法从EventHandler中的视图控制器访问变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!