【发布时间】:2011-08-15 13:10:43
【问题描述】:
如何将JSplitPane 设置为可调整大小的false?我不想调整JSplitPane 的大小,我将它用作此窗格的边框。有没有其他方法可以创建相同的边框结构以将面板垂直分成两部分。
【问题讨论】:
-
禁用拆分窗格。见下文。
如何将JSplitPane 设置为可调整大小的false?我不想调整JSplitPane 的大小,我将它用作此窗格的边框。有没有其他方法可以创建相同的边框结构以将面板垂直分成两部分。
【问题讨论】:
为了防止用户调整窗格大小,您还可以将分隔线大小设置为零。
splitPane.setDividerSize(0);
【讨论】:
splitPane.setEnabled( false );
【讨论】:
final double pos = split.getDividers().get(0).getPosition();
split.getDividers().get(0).positionProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0,
Number arg1, Number arg2) {
split.getDividers().get(0).setPosition(pos);
}
});
【讨论】:
您可以覆盖 JSplitPane 方法 getDividerLocation() 和 getLastDividerLocation 并返回一个常量值。
JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT){
private final int location = 100;
{
setDividerLocation( location );
}
@Override
public int getDividerLocation() {
return location ;
}
@Override
public int getLastDividerLocation() {
return location ;
}
};
【讨论】:
考虑将Compound Borders 与EtchedBorder 一起使用
【讨论】:
正如@camickr answer cmets 所说,禁用整个拆分窗格可以禁用包含的组件交互行为(例如,它们不会在悬停时显示交互光标)
相反,如果使用 BasicSplitPaneUI,您可以从 UI 中禁用分隔符
public class MySplitPane extends JSplitPane {
public void setResizable(boolean resizable) {
BasicSplitPaneUIui = (BasicSplitPaneUI) this.getUI();
ui.getDivider().setEnabled(resizable);
}
}
【讨论】: