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 [#summary] `JToolBar`専用`JToolBar.Separator`のサイズ変更をテストします。 #download(https://drive.google.com/uc?id=1DUJCi9uB6NXFr0uKs3fvCHLW4Z_0xpbl) * Source Code Examples [#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 [#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 [#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] #comment #comment