最近在作一个OpenSwing的项目,须要将网页版本变成单机版本,在使用JSplitPane的时候,分割线老是自由的变更,使得效果很差看,因此我查过相关资料,终于解决这个问题了。 html
JSplitPane.setEnabled(false); // 禁止拖动分割条 java
JSplitPane.setDividerLocation(double proportionalLocation); // 设置分割比例 api
注意:必须在frame.setVisible(true);以后才有效 ide
理由:根据 setDividerLocation(int) 来实现此方法。此方法以分隔窗格的当前大小为基础迅速改变窗格的大小。若是分隔窗格没有正确地实现而且不显示在屏幕上,此方法将不产生任何影响(新的分隔条位置将成为0(当前的 size *proportionalLocation ))。
参数:
proportionalLocation - 指示百分比的双精度浮点值,从 0 (top/left) 到 1.0 (bottom/right)
抛出:IllegalArgumentException - 若是指定的位置为 < 0 or > 1.0 函数
看完后没什么概念。。。只以为写的不是那么直白,也许确有什么猫腻在里边。特别是"若是分隔窗格没有正确地实现而且不显示在屏幕上,此方法将不产生任何影响"这句,没大理解。。。 布局
于是去看看JSplitPane的源码。关于setDividerLocation大体以下: spa
public void setDividerLocation(double proportionalLocation) {
if (proportionalLocation < 0.0 || proportionalLocation > 1.0) {
throw new IllegalArgumentException("proportional location must "
+ "be between 0.0 and 1.0.");
}
if (getOrientation() == VERTICAL_SPLIT) {
setDividerLocation((int)((double)(getHeight() - getDividerSize()) *
proportionalLocation));
}
else {
setDividerLocation((int)((double)(getWidth() - getDividerSize()) *
proportionalLocation));
}
} htm
这下有些明白了,setDividerLocation(double)这个函数会用到getWidth()或者getHeight()这样的函数,而java桌面程序在没有主窗体setVisible以前,若是使用布局,还没有validate()和paint()每一个组件的宽和高默认都是0。也就是说必定要在主窗体setVisible(true)以后再使用setDividerLocation(double)才会有效。 get