Reputation: 273
In Swing, what's the best way to make the JSplitPane to split two jpanels with 50% size each.
It looks like if I don't set preferred sizes on the panels it always makes the first panel almost invisible (2%) and the second one (98%)
Thanks in advance
Upvotes: 27
Views: 21090
Reputation: 3996
The solutions here do not take into account the case where the user moves the divider (i.e. a variable divider location). A complete example that takes this into account is available here:
Upvotes: 1
Reputation: 357
I had a similar problem and I solved it by using a component listener in the parent container and set the divider location on the first resize. Initialise a variable firstResize to true and add this into the parent container constructor:
addComponentListener(new ComponentAdapter(){
@Override
public void componentResized(ComponentEvent e) {
if(firstResize){
splitPane.setDividerLocation(0.5);
firstResize = false;
}
}
});
This should cause the divider to be centred when the parent container size is first set.
Upvotes: 5
Reputation: 54705
You should use setDividerLocation(double proportionalLocation)
to determine the initial space distribution of the JSplitPane
, and then call setResizeWeight(double)
with the same value to ensure that the panes are resized in proportion.
Also, be aware: Calling setDividerLocation(double)
before the JSplitPane
is visible will not work correctly, as the space calculation is based on the Component
's current size. Instead you need to involve a nasty hack, such as overriding the JPanel
's paint method that contains the JSplitPane
:
private boolean painted;
@Override
public void paint(Graphics g) {
super.paint(g);
if (!painted) {
painted = true;
splitPane.setDividerLocation(0.25);
}
}
Upvotes: 29
Reputation: 55524
Use
setResizeWeight
(.5d);
[...] A value of 0, the default, indicates the right/bottom component gets all the extra space (the left/top component acts fixed), where as a value of 1 specifies the left/top component gets all the extra space (the right/bottom component acts fixed). [...]
Upvotes: 29