On Fri, 22 Aug 2025 03:53:13 GMT, Prasanta Sadhukhan <[email protected]> 
wrote:

> When the component orientation is changed from LTR to RTL or the other way 
> around, JSplitPane exchanges the left and right components. However, it does 
> this by adding and removing components instead of swapping the leftComponent 
> and rightComponent fields which results in leftComponent field is left as 
> null.
> 
> This is because when JSplitPane calls `setLeftComponent(rightComponent)` it 
> calls `JSplitPane.addImpl` which calls `super.addImpl`
> which [removes] 
> https://github.com/openjdk/jdk/blob/f423e1d9ad37135abacb8deb2d2151e21768a23e/src/java.desktop/share/classes/java/awt/Container.java#L1118
>  the component from the JSplitPane as it calls `JSplitPane.remove` so the 
> sequence is
> At start `leftComponent = Red, rightComponent = Green`
> 
> before `super.addImpl` is called in `JSplitPane.addImpl` the 
> 
> `leftComponent = Green, rightComponent = Green`
> 
> After super.addImpl is called, it calls [JSplitPane.remove] 
> (https://github.com/openjdk/jdk/blob/f423e1d9ad37135abacb8deb2d2151e21768a23e/src/java.desktop/share/classes/javax/swing/JSplitPane.java#L918)
>  where it sets
> leftComponent = null.
> 
> so we have
> leftComponent = null, rightComponent = Green and then it calls [super.remove] 
> (https://github.com/openjdk/jdk/blob/f423e1d9ad37135abacb8deb2d2151e21768a23e/src/java.desktop/share/classes/javax/swing/JSplitPane.java#L922)
>  which calls `JSplitPane.remove(index)` and since index=1 because "Green" is 
> 1 it removes rightComponent 
> so we have now
> leftComponent = null, rightComponent = null
> 
> so when we now call 
> [setRightComponent](https://github.com/openjdk/jdk/blob/f423e1d9ad37135abacb8deb2d2151e21768a23e/src/java.desktop/share/classes/javax/swing/JSplitPane.java#L382)
>  it sets rightComponent to Red but leftComponent is not set and is still null.
> 
> So fix is to just swap the left and right component in 
> setComponentOrientation call itself without using Container add/remove 
> components

This pull request has now been integrated.

Changeset: 285d16a3
Author:    Prasanta Sadhukhan <[email protected]>
URL:       
https://git.openjdk.org/jdk/commit/285d16a3a3b29b175670a042165780859a7dbc81
Stats:     43 lines in 2 files changed: 35 ins; 0 del; 8 mod

8365886: JSplitPane loses track of the left component when the component 
orientation is changed

Reviewed-by: tr, kizune

-------------

PR: https://git.openjdk.org/jdk/pull/26893

Reply via email to