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

test/jdk/javax/swing/JSplitPane/TestSplitPaneOrientationTest.java line 23:

> 21:  * questions.
> 22:  */
> 23: 

Please update copyright year.

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

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

Reply via email to