SplitPane layout question

Florian Brunner fbrunnerlist at gmx.ch
Wed Jan 14 22:59:44 UTC 2015


I've cross-posted the question here: 
http://stackoverflow.com/questions/27953751/splitpane-layout-issue

I'm still looking for solutions.

-Florian

Am Montag, 5. Januar 2015, 22.35:48 schrieb Florian Brunner:
> Hi Scott,
> 
> Thanks for your answer.
> 
> Unfortunatly, I still couldn't fix this issue.
> 
> I tried several things including setting the prefWidth/ prefHeight of the
> items to the expected value, but I couldn't stop the SplitPane to
> effectively "hide" the first and the third (last) item during a re-layout.
> 
> The two dividers changed during the layoutChildren call as follows:
> 
> Divider position changed: old value: 0.10857763300760044, new value:
> 0.004343105320304018
> 
> Divider position changed: old value: 0.8914223669923995, new value:
> 0.995656894679696
> 
> I had a look at the com.sun.javafx.scene.control.skin.SplitPaneSkin (source
> code provided with the JDK), but unfortunatly it's not easy there to see how
> the areas are calculated in this situation.
> 
> You mentioned the min/ max sizes. Just for testing purposes I also set the
> minHeight/ minWidth but this only had the effect that I couldn't readjust
> the divider with the mouse anymore. During the re-layout the issue still
> persisted.
> 
> What else could I try?
> 
> -Florian
> 
> Am Montag, 22. Dezember 2014, 07.19:37 schrieb Scott Palmer:
> > The min/max sizes of the children are probably being respected.
> > 
> > Scott
> > 
> > > On Dec 22, 2014, at 7:13 AM, Florian Brunner <fbrunnerlist at gmx.ch>
> > > wrote:
> > > 
> > > Hi,
> > > 
> > > Sometimes when I'm setting the divider positions of a SplitPane
> > > programmatically my value get overridden again by some JavaFX internal
> > > layout code.
> > > 
> > > For debugging purposes I've added a listener to the position property of
> > > the divider and have thrown a RuntimeException to see the stack trace.
> > > It
> > > looks like this:
> > > 
> > > ------------------------------------------------------------------------
> > > --
> > > ---------------- at
> > > com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(Ex
> > > pr
> > > essionHelper.java:361)>
> > > 
> > >    at
> > > 
> > > com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(Expression
> > > He
> > > lper.java:81)>
> > > 
> > >    at
> > > 
> > > javafx.beans.property.DoublePropertyBase.fireValueChangedEvent(DoublePro
> > > pe
> > > rtyBase.java:106)>
> > > 
> > >    at
> > > 
> > > javafx.beans.property.DoublePropertyBase.markInvalid(DoublePropertyBase.
> > > ja
> > > va:113)>
> > > 
> > >    at
> > > 
> > > javafx.beans.property.DoublePropertyBase.set(DoublePropertyBase.java:146
> > > )
> > > 
> > >    at
> > >    javafx.scene.control.SplitPane$Divider.setPosition(SplitPane.java:486
> > >    )
> > >    at
> > > 
> > > com.sun.javafx.scene.control.skin.SplitPaneSkin.setAbsoluteDividerPos(Sp
> > > li
> > > tPaneSkin.java:310)>
> > > 
> > >    at
> > > 
> > > com.sun.javafx.scene.control.skin.SplitPaneSkin.setupContentAndDividerFo
> > > rL
> > > ayout(SplitPaneSkin.java:502)>
> > > 
> > >    at
> > > 
> > > com.sun.javafx.scene.control.skin.SplitPaneSkin.layoutChildren(SplitPane
> > > Sk
> > > in.java:817)>
> > > 
> > >    at javafx.scene.control.Control.layoutChildren(Control.java:589)
> > >    at javafx.scene.Parent.layout(Parent.java:1074)
> > >    at javafx.scene.Parent.layout(Parent.java:1080)
> > >    at javafx.scene.Parent.layout(Parent.java:1080)
> > >    at javafx.scene.Parent.layout(Parent.java:1080)
> > >    at javafx.scene.Parent.layout(Parent.java:1080)
> > >    at javafx.scene.Parent.layout(Parent.java:1080)
> > >    at javafx.scene.Parent.layout(Parent.java:1080)
> > >    at javafx.scene.Parent.layout(Parent.java:1080)
> > >    at javafx.scene.Parent.layout(Parent.java:1080)
> > >    at javafx.scene.Scene.doLayoutPass(Scene.java:532)
> > >    at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2363)
> > >    at com.sun.javafx.tk.Toolkit.lambda$runPulse$28(Toolkit.java:314)
> > >    at com.sun.javafx.tk.Toolkit$$Lambda$230/25595560.run(Unknown Source)
> > >    at java.security.AccessController.doPrivileged(Native Method)
> > >    at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:313)
> > >    at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:340)
> > >    at
> > >    com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:45
> > >    1
> > >    )
> > >    at
> > >    com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:43
> > >    1
> > >    )
> > >    at
> > > 
> > > com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$363(QuantumTo
> > > ol
> > > kit.java:298)>
> > > 
> > >    at
> > > 
> > > com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$59/174792896.run(Unknow
> > > n
> > > Source)
> > > 
> > >    at
> > > 
> > > com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.
> > > ja
> > > va:95)>
> > > 
> > >    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
> > >    at
> > > 
> > > com.sun.glass.ui.gtk.GtkApplication.lambda$null$45(GtkApplication.java:1
> > > 26
> > > )
> > > 
> > >    at
> > >    com.sun.glass.ui.gtk.GtkApplication$$Lambda$55/1472148546.run(Unknown
> > > 
> > > Source)
> > > 
> > >    at java.lang.Thread.run(Thread.java:745)
> > > 
> > > ------------------------------------------------------------------------
> > > --
> > > ----------------
> > > 
> > > It doesn't seem to get triggered by some code of mine (at least not
> > > directly according to the stack trace).
> > > 
> > > Why is this re-layout happing here?
> > > Why does it override the values I've set for the divider positions?
> > > How can stop this?
> > > 
> > > Thanks for some insights.
> > > 
> > > -Florian



More information about the openjfx-dev mailing list