问题
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
回答1:
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). [...]
回答2:
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);
}
}
回答3:
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.
回答4:
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:
How do you get JSplitPane to keep the same proportional location if the user has moved the location of the divider
来源:https://stackoverflow.com/questions/2311449/jsplitpane-splitting-50-precisely