On Tue, 26 Aug 2025 07:11:53 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
>
> Prasanta Sadhukhan has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Fire property change notification instead

src/java.desktop/share/classes/javax/swing/JSplitPane.java line 390:

> 388:             } else {
> 389:                 if (leftComponent != null) {
> 390:                     this.leftComponent = rightComponent;

Suggestion:

                    this.leftComponent = leftComponent;

Is this by mistake ?

src/java.desktop/share/classes/javax/swing/JSplitPane.java line 393:

> 391:                 }
> 392:                 if (rightComponent != null) {
> 393:                     this.rightComponent = leftComponent;

Suggestion:

                    this.rightComponent = rightComponent;

This one too?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26893#discussion_r2300405204
PR Review Comment: https://git.openjdk.org/jdk/pull/26893#discussion_r2300406822

Reply via email to