JSplitPaneのDivider位置を推奨サイズでリセットする
Total: 33
, Today: 2
, Yesterday: 15
Posted by aterai at
Last-modified:
Summary
JSplitPane
のDivider
位置を子コンポーネントの推奨サイズに基づいた初期状態に戻します。
Screenshot
Advertisement
Source Code Examples
SpinnerNumberModel model1 = new SpinnerNumberModel(100, 10, 300, 10);
JScrollPane scroll1 = makeScrollPane(new JTree(), model1);
SpinnerNumberModel model2 = new SpinnerNumberModel(150, 10, 300, 10);
JTextArea textArea = new JTextArea();
JScrollPane scroll2 = makeScrollPane(textArea, model2);
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scroll1, scroll2);
split.setOneTouchExpandable(true);
split.setContinuousLayout(true);
JMenu menu1 = new JMenu("JSplitPane");
menu1.add(makeSpinner("L: ", model1));
menu1.add(makeSpinner("R: ", model2));
menu1.addSeparator();
menu1.add("resetToPreferredSizes").addActionListener(e -> {
split.resetToPreferredSizes();
info(split, textArea);
});
menu1.addSeparator();
// ...
JMenu menu2 = new JMenu("ResizeWeight");
JRadioButtonMenuItem r0 = new JRadioButtonMenuItem("0.0", true);
menu2.add(r0).addActionListener(e -> split.setResizeWeight(0d));
JRadioButtonMenuItem r1 = new JRadioButtonMenuItem("0.5");
menu2.add(r1).addActionListener(e -> split.setResizeWeight(.5));
JRadioButtonMenuItem r2 = new JRadioButtonMenuItem("1.0");
menu2.add(r2).addActionListener(e -> split.setResizeWeight(1d));
ButtonGroup group = new ButtonGroup();
for (AbstractButton r : Arrays.asList(r0, r1, r2)) {
group.add(r);
}
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu1);
menuBar.add(menu2);
View in GitHub: Java, KotlinExplanation
- JSplitPane#resetToPreferredSizes()を実行すれば、
Divider
の位置を左右の子コンポーネントの推奨サイズに基づいた初期位置にリセット可能 - 左右の推奨サイズ(幅)の合計が
JSplitPane
の幅以下の場合はその余りスペースをJSplitPane#getResizeWeight()の値で配分した位置にリセット - 左右の推奨サイズ(幅)の合計が
JSplitPane
の幅以上の場合は、その推奨サイズ(getPreferredSize()
)ではなく最小サイズ(getMinimumSizes()
)に基づいた余りスペースを計算し、JSplitPane#getResizeWeight()の値でそれぞれ配分した位置にリセット- たとえばJSplitPaneの幅を
300px
、左コンポーネントの推奨サイズを200px
、右を250px
、リサイズウェイトを0.0
とした状態でJSplitPane#getResizeWeight()
を実行すると左コンポーネントの最小サイズ23px
の位置にDivider
は配置される
- たとえばJSplitPaneの幅を