TITLE:BorderにJComponentを配置
Posted by aterai at 2006-04-10

BorderにJComponentを配置

BorderにJCheckBoxやJButtonなどを配置します。Santhosh Kumar's WeblogComponentTitledBorderを利用しています。
  • category: swing folder: ComponentTitledBorder title: BorderにJComponentを配置 tags: [Border, TitledBorder, JCheckBox, JButton] author: aterai pubdate: 2006-04-10T12:01:31+09:00 description: BorderにJCheckBoxやJButtonなどを配置します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTKEdJmyzI/AAAAAAAAAVY/FTQKJ7__MnE/s800/ComponentTitledBorder.png

概要

BorderJCheckBoxJButtonなどを配置します。
ComponentTitledBorder.png

サンプルコード

#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
JCheckBox c = new JCheckBox("CheckBox", true);
#spandel
c.setFocusPainted(false); 
#spanend
#spanadd
c.setFocusPainted(false);
#spanend
JLabel l1 = new JLabel("adfasdfasdfa");
Border eb = BorderFactory.createEtchedBorder();
l1.setBorder(new ComponentTitledBorder(c, l1, eb));

解説

上記のサンプルは、Santhosh Kumar's WeblogComponentTitledBorderを参考にして作成しています。

解説

  • SwingUtilities.paintComponentBorderにコンポーネントを描画
    • 描画しているだけなのでJCheckBoxなどのコンポーネントが選択されてもイベントが伝わらない
    • このためこのComponentTitledBorderではマウスリスナーを設定してComponent#dispatchEventメソッドで描画しているコンポーネントに以下のようにマウスイベントを転送
SwingUtilities.paintComponentでBorderにコンポーネントを描画しているため、JComboBoxなどが選択されてもイベントが伝わりません。このためComponentTitledBorderでは、マウスリスナーを設定してComponent#dispatchEventメソッドで描画しているコンポーネントにイベントを飛ばしています。
@Override public void mouseClicked(MouseEvent me) {
  Component src = me.getComponent();
  tgtCmp.dispatchEvent(SwingUtilities.convertMouseEvent(src, me, tgtCmp));
  src.repaint();
}

参考リンク

参考リンク

コメント

コメント