Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add explanation on fx:root #35

Merged
merged 3 commits into from
Jul 26, 2024

Conversation

JiaXinEu
Copy link
Contributor

@JiaXinEu JiaXinEu commented Jul 4, 2024

As proposed in #21

Copy link

@UdhayaShan1 UdhayaShan1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct me if im wrong on any of this 😅

I think can state the difference between using fx:root and not and its implications clearer, for example if we use fx:root construct then the controller is now set programmatically. Here it is set in DialogBox.

That being said, we can also provide answers for the exercise where MainWindow can either use fx:root or Stage as root node.

For eg, if use fx:root, we set the controller programmatically in MainWindow constructor

    public MainWindow() {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/path/to/MainWindow.fxml"));
        fxmlLoader.setRoot(this);
        fxmlLoader.setController(this);
        try {
            fxmlLoader.load();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

@JiaXinEu
Copy link
Contributor Author

for example if we use fx:root construct then the controller is now set programmatically

Thank you for the suggestion, I have added a line on this. As for the sample solution, I am not too sure on whether to include it since it was left as an exercise and no solution has been given on previous exercises.

@UdhayaShan1
Copy link

UdhayaShan1 commented Jul 11, 2024

Thanks for adding! Yep your right, I think that can be another issue for the future as well.

Copy link
Contributor

@damithc damithc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good start @JiaXinEu
Added some comments/suggestions.

Comment on lines 108 to 110
The main difference here is that DialogBox checks `Use fx:root construct` and _does not define a controller class_. Checking this enables the use of the `fx:root` element, allowing you to reference a root element predefined by calling the `setRoot()` method. The controller can be programatically set using the `setController()` method.

More about `fx:root` on the documentation [Introduction to FXML | JavaFX 2.2](https://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html#root_elements).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The main difference here is that DialogBox checks `Use fx:root construct` and _does not define a controller class_. Checking this enables the use of the `fx:root` element, allowing you to reference a root element predefined by calling the `setRoot()` method. The controller can be programatically set using the `setController()` method.
More about `fx:root` on the documentation [Introduction to FXML | JavaFX 2.2](https://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html#root_elements).
The main difference here is that we tick the checkbox `Use fx:root construct` and _do not define a controller class_. Ticking this enables the use of the `fx:root` element, allowing you to reference a root element predefined by calling the `setRoot()` method. The controller can be programatically set using the `setController()` method.
More about `fx:root` on the documentation [Introduction to FXML | JavaFX 2.2](https://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html#root_elements).

Reason: checks can be interpreted as verifies.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can/should we also explain why we do the DialogBox differently? Must we do it this way for DialogBox or we are simply illustrating a different technique?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... by calling the setRoot() method.

It's not clear if you mean this allows you to call the setRoot() method or this has the same effect as calling the setRoot() method.

Copy link
Contributor Author

@JiaXinEu JiaXinEu Jul 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can/should we also explain why we do the DialogBox differently? Must we do it this way for DialogBox or we are simply illustrating a different technique?

This is done differently since DialogBox is a custom component we build that will be reused.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... by calling the setRoot() method.

It's not clear if you mean this allows you to call the setRoot() method or this has the same effect as calling the setRoot() method.

Use of the fx:root element allows us to reference a root element. This root element will be predefined by calling the setRoot() method before we load().

@damithc damithc merged commit 40c1323 into se-edu:master Jul 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants