Layout Debugger

When you're creating layouts or working on CSS it some times help to be able to visualise the scene graph and make live changes to the node properties of your layout. The absolutely best tool for this job is definitely the Scenic View tool from FX Experience, but some times you just need to get a quick overview as fast as possible.

Debugging a scene

Simply hit Alt-Meta-J to bring up the built in debugging tool Layout Debugger. The debugger attaches to the currently active Scene and opens a new window that shows you the current scene graph and properties for the currently selected node.

Usage

While the debugger is active you can hover over any node in your View and it will be automatically highlighted in the debugger window. Clicking a node will also show you the properties of that node. Some of the properties are editable, like backgroundColor, text, padding etc.

When you hover over the node tree in the debugger, the corresponding node is also highlighted directly in the View.

Stop a debugging session

Close the debugger window by hitting Esc and the debugger session ends. You can debug multiple scenes simultaneously, each debugging session will open a new window corresponding to the scene you debug.

Configurable shortcut

The default shortcut for the debugger can be changed by setting an instance of KeyCodeCombination into FX.layoutDebuggerShortcut. You can even change the shortcut while the app is running. A good place to configure the shortcut would be in the init block of your App class.

Adding features

While this debugger tool is in no way a replacement for Scenic View, we will add features based on reasonable feature requests. If the feature adds value for simple debugging purposes and can be implemented in a small amount of code, we will try to add it, or better yet, submit a pull request. Have a look at the source code to familiarise yourself with the tool.

Entering fullscreen

To enter fullscreen you need to get a hold of the current stage and call stage.isFullScreen = true. The primary stage is the active stage unless you opened a modal window via view.openModal() or manually created a stage. The primary stage is available in the variable FX.primaryStage. To open the application in fullscreen on startup you should override start in your app class:

class MyApp : App(MyView::class) {
override fun start(stage: Stage) {
super.start(stage)
stage.isFullScreen = true
}
}

In the following example we toggle fullscreen mode in a modal window via a button:

button("Toggle fullscreen") {
setOnAction {
with (modalStage) { isFullScreen = !isFullScreen }
}
}

Logging

Component has a lazy initialized instance of java.util.Logger named log. Usage:

log.info { "Log message here" }

TornadoFX makes no changes to the logging capabilities of java.util.Logger. See the javadoc for more information.