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

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

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

Changes: https://git.openjdk.org/jdk/pull/26893/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26893&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8365886
  Stats: 40 lines in 2 files changed: 34 ins; 0 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/26893.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26893/head:pull/26893

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

Reply via email to