TITLE:JToolBarでアイコンボタンを右寄せ

Posted by aterai at 2006-01-23

JToolBarでアイコンボタンを右寄せ

JToolBarでアイコンボタンを右寄せ、下寄せで表示します。

  • &jnlp;
  • &jar;
  • &zip;
ToolBarLayout.png

サンプルコード

String path = "/toolbarButtonGraphics/general/";
URL url1 = getClass().getResource(path+"Copy24.gif");
URL url2 = getClass().getResource(path+"Cut24.gif");
URL url3 = getClass().getResource(path+"Help24.gif");
toolbar.add(createToolbarButton(url1));
toolbar.add(createToolbarButton(url2));
toolbar.add(Box.createGlue());
toolbar.add(createToolbarButton(url3));
private static JButton createToolbarButton(URL url) {
  JButton b = new JButton(new ImageIcon(url));
  b.setRequestFocusEnabled(false);
  return b;
}

解説

JToolBarのデフォルトレイアウトはBoxLayoutなので、Box.createGlueをアイコンボタンの間に挟むことで右寄せをしています。

ボタンとボタンの間隔を固定値で空けたい場合は、Box.createRigidAreaを使用します。Box.createHorizontalStrutやBox.createVerticalStrutを使うとツールバーが水平垂直に切り替わった時に、余計な余白が出来てしまうことがあります。

ツールバーが垂直になった場合のことも考えて、VerticalGlueも一緒に挿入していますが、特に問題ないようです。

アイコンは、Java look and feel Graphics Repositoryのjlfgr-1_0.jarから読み込んでいます。


JDK 1.6 で、JDK 1.5 のようなボタン表示(フォーカスが無い状態)にするには、以下のようなリスナーを追加して描画し直す必要があるようです。

ToolBarLayout1.png

JDK 1.6 で、JDK 1.5 のようなボタン表示(フォーカスが無い状態)にするには、JButton#setRequestFocusEnabled(false);、または、JButton#setFocusable(false); とする必要があるようです。

  • よく考えれば、ツールバーのボタンが、Focusableになっていると色々面倒…
    • コピーボタンを押したらテキストエディタの選択状態が消えたり、参考の質問のような不具合が起こるなど
  • 参考

参考リンク

コメント

  • 環境によって、上記のサンプルが右寄せにならない場合もあるようです。 -- aterai
  • setRequestFocusEnabled(false)、スクリーンショット更新。 -- aterai