Swing/ToolBarSeparatorSize の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ToolBarSeparatorSize へ行く。
- Swing/ToolBarSeparatorSize の差分を削除
---
category: swing
folder: ToolBarSeparatorSize
title: JToolBar専用JSeparatorのサイズを指定する
tags: [JToolBar, JSeparator, UIManager]
author: aterai
pubdate: 2023-04-24T05:02:52+09:00
description: JToolBar専用JToolBar.Separatorのサイズ変更をテストします。
image: https://drive.google.com/uc?id=1DUJCi9uB6NXFr0uKs3fvCHLW4Z_0xpbl
---
* 概要 [#summary]
`JToolBar`専用`JToolBar.Separator`のサイズ変更をテストします。
#download(https://drive.google.com/uc?id=1DUJCi9uB6NXFr0uKs3fvCHLW4Z_0xpbl)
* サンプルコード [#sourcecode]
#code(link){{
// UIManager.put("ToolBar.separatorSize", new Dimension(2, 20));
JToolBar bar = new JToolBar();
bar.add(new JCheckBox("JCheckBox"));
bar.addSeparator();
bar.add(new JRadioButton("JRadioButton"));
bar.addSeparator(new Dimension(32, 32));
bar.add(new JButton("JButton"));
bar.addSeparator(new Dimension(10, 10));
bar.add(new JToggleButton("JToggleButton"));
bar.add(Box.createVerticalGlue());
SpinnerNumberModel mw = new SpinnerNumberModel(10, -10, 50, 1);
SpinnerNumberModel mh = new SpinnerNumberModel(32, -10, 50, 1);
ChangeListener cl = e -> {
Dimension d = new Dimension(
mw.getNumber().intValue(), mh.getNumber().intValue());
for (Component c : bar.getComponents()) {
if (c instanceof JToolBar.Separator) {
((JToolBar.Separator) c).setSeparatorSize(d);
}
}
bar.revalidate();
};
mw.addChangeListener(cl);
mh.addChangeListener(cl);
}}
* 解説 [#explanation]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JToolBar.html#addSeparator-java.awt.Dimension- JToolBar#addSeparator(Dimension)]メソッドで`JToolBar`にサイズを指定して`JSeparator`を追加可能
- `UIManager.put("ToolBar.separatorSize", new Dimension(...))`でまとめてデフォルトの`JToolBar.Separator`のサイズ指定する方法もある
-- `UIManager.put("ToolBar.separatorSize", new Dimension(...))`を使用した水平`JToolBar`の場合、幅が高さ、高さが幅に自動的に入れ替わる
- `JToolBar.Separator`のサイズを`JToolBar#addSeparator(Dimension)`や`JToolBar.Separator#setSeparatorSize(...)`で指定して水平`JToolBar`を垂直`JToolBar`に変換:
-- `UIManager.put("ToolBar.separatorSize", new Dimension(...))`を使用した場合と異なり、幅と高さの入れ替えは発生しない
-- `WindowsLookAndFeel`の場合、区切り線は指定した幅までのみ描画され、親`JToolBar`の幅まで拡張されない
-- `NimbusLookAndFeel`の場合、区切り点線は親`JToolBar`の幅まで拡張して描画される
-- `MetalLookAndFeel`の場合、区切り線は描画されず指定したサイズがコンポーネントの間隔になる
- `[https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JToolBar.Separator.html#setSeparatorSize-java.awt.Dimension- JToolBar.Separator#setSeparatorSize(Dimension)]`
-- 負のサイズを設定してもエラーにはならない
-- `null`を設定してもなにも変化せず、初期状態に戻せない?
-- このサンプルでは以下のように一旦`JToolBar#removeAll()`ですべてのコンポーネントを削除してからサイズ指定なしで`JToolBar#addSeparator()`を使用して`JToolBar.Separator`を追加しなおしている
#code{{
JButton button = new JButton("reset");
button.addActionListener(e -> {
Component[] list = bar.getComponents();
bar.removeAll();
for (Component c : list) {
if (c instanceof JToolBar.Separator) {
bar.addSeparator();
} else {
bar.add(c);
}
}
});
}}
* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JToolBar.html#addSeparator-java.awt.Dimension- JToolBar#addSeparator(Dimension) (Java Platform SE 8)]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JToolBar.Separator.html JToolBar.Separator (Java Platform SE 8)]
* コメント [#comment]
#comment
#comment