The problem in Java FX when we hide controls is that once we set it to setVisible(false), the control will be hidden yes. But its bounded space will still be in effect and it would look pretty ugly seeing a huge empty area in your user interface.

While some have suggested placing it in an HBox or VBox and removing and adding them when needed, the better solution for me is to call this control.managedProperty().bind(control.visibleProperty()); before any calls to setVisible() whether you want to hide it or not.

Once that is called, when you hide a control, its bounded space will be removed from the user interface as well making it look like it is not there at all.

A community user in the Oracle forum posted this short snippet in hiding a TableView column header regardless if your table still does not have any data.

The listener will handle the hiding of the header column once it gets triggered.

One might think the quickest and easiest way to hide a Surface object in is to set its opacity to transparent.

While true, you will also have to set its other properties like text color and such which is a hassle. Okay, so if you do not find that a hassle, there is another problem.

All input events like mouse clicks will be absorbed by this surface. So if you intentionally wanted to hide the Surface because the you want the other Surface below it to receive events, it will not work.

What I did was to make use of the Modifier that was used to add the Surface to the View. It has a setOrigin method that you can take advantage of to move this Surface object away from the user’s screen.

Say, setOrigin(0.5, 0.5) moves the Surface object to the center of the screen. You can do setOrigin(-0.5, -0.5) to move it out of the user’s screen making the user think that you actually hid the Surface object when in fact, you just moved it.

To show the Surface object back, just set the values to non-negative. That’s it!

Related Posts Plugin for WordPress, Blogger...