英文:
How to send event from child class to parent class
问题
ParentController
@FXML private Button openDirButton;
@FXML private ImageView mainImageView;
@FXML
public void initialize(URL location, ResourceBundle resources) {
// 选择目录按钮
OpenDirectoryButton ODB = new OpenDirectoryButton();
ODB.getDirSetImageSetListView(openDirButton, mainImageView);
String currentPath = ODB.getCurrentPath();
System.out.println(currentPath); // null
}
ChildController
public class OpenDirectoryButton {
public static String path;
public Button getDirSetImageSetListView(Button button, ImageView imageView) {
button.setOnAction(actionEvent -> {
// 这是我创建的一个类
DirectoryChoose DC = new DirectoryChoose();
// 获取目录路径
path = DC.getPath();
// 获取图片路径列表
imageList = DC.getImageList(path);
image = new Image("file:///" + path + File.separator + imageList.get(0));
imageView.setImage(image);
});
return button;
}
public String getCurrentPath() {
return path;
}
}
如果您还有其他问题,欢迎随时提问。
英文:
I want to know about sending event from child to parent.
I wrote this code, and if choosing a directory, I can see a first picture in a directory on ImageView.
After pushing a button and selecting a directory, I want to send path to ParentController.
But, now I cannot send because getCurrentPath() is called when creating a window.
ParentController
<!-- language: lang-java -->
@FXML private Button openDirButton;
@FXML private ImageView mainImageView;
@FXML
public void initialize(URL location, ResourceBundle resources) {
// Choosing Directory Button
OpenDirectoryButton ODB = new OpenDirectoryButton();
ODB.getDirSetImageSetListView(openDirButton, mainImageView);
String currentPath = ODB.getCurrentPath();
System.out.println(currentPath); // null
ChildController
<!-- language: lang-java -->
public class OpenDirectoryButton {
public static String path;
public Button getDirSetImageSetListView(Button button, ImageView imageView) {
button.setOnAction(actionEvent -> {
// This is a class I made
DirectoryChoose DC = new DirectoryChoose();
// Get a Directory Path
path = DC.getPath();
// Get a list of path of images
imageList = DC.getImageList(path);
image = new Image("file:///" + path + File.separator + imageList.get(0));
imageView.setImage(image);
});
return button;
}
public String getCurrentPath() {
return path;
}
}
答案1
得分: 1
使用事件的方法有几种。
-
https://github.com/AlmasB/FXEventBus。您可以将其集成到您的项目中,然后可以用它来操作事件。
-
您可以声明您的类为静态字段,然后将其发送到您的子类,并且从子类中您将使用您的字段。这不是一个好的使用示例。
ParentController
在类的字段中,
public static ParentConrtroller instance; // 不好的在公共中声明字段
public void inititalize(URL location, ResourceBundle resources){
instance = this;
}
Child Controller
ParentController.instance // 并且父类的每个公共方法在这里都可以使用
英文:
For using with Events there is several ways.
1)https://github.com/AlmasB/FXEventBus. You could integrate it into your project then might to use to manipulate with events.
- You could declare your class like static field and send to your child and from child class you will use your fields Not good example to use.
ParentController
in field of class
public static ParentConrtroller instance; // Not good declare field in public
***
public void inititalize(URL location, ResourceBundle resources){
instance = this;
}
Child Controller
ParentController.instance //and every public method of Parent is available for your
答案2
得分: 0
Pass a consumer to getDirSetIgmageSetListView
ParentController
ODB.getDirSetImageSetListView(openDirButton, mainImageView, path -> {
System.out.println(path);
});
ChildController
public Button getDirSetImageSetListView(Button button, ImageView imageView, Consumer<String> pathConsumer) {
button.setOnAction(actionEvent -> {
// This is a class I made
DirectoryChoose DC = new DirectoryChoose();
// Get a Directory Path
path = DC.getPath();
// Get a list of path of images
imageList = DC.getImageList(path);
image = new Image("file:///" + path + File.separator + imageList.get(0));
imageView.setImage(image);
pathConsumer.accept(path); //execute consumer with your path variable
});
return button;
}
英文:
Pass a consumer to getDirSetIgmageSetListView
ParentController
ODB.getDirSetImageSetListView(openDirButton, mainImageView, path->{
System.out.println(path);
});
ChildController
public Button getDirSetImageSetListView(Button button, ImageView imageView, Consumer<String> pathConsumer) {
button.setOnAction(actionEvent -> {
// This is a class I made
DirectoryChoose DC = new DirectoryChoose();
// Get a Directory Path
path = DC.getPath();
// Get a list of path of images
imageList = DC.getImageList(path);
image = new Image("file:///" + path + File.separator + imageList.get(0));
imageView.setImage(image);
imageConsumer.accept(path); //execute consumer with your path variable
});
return button;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论