BorderにJComponentを配置

編集者:Terai Atsuhiro~

作成日:2006-04-10
更新日:2022-10-07 (金) 14:58:10
  • 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などを配置します。

概要

BorderにJCheckBoxやJButtonなどを配置します。Santhosh Kumar's WeblogComponentTitledBorderを利用しています。

サンプルコード

#spanend
#spanadd
JCheckBox c = new JCheckBox("CheckBox", true);
#spanend
#spanadd
c.setFocusPainted(false);
#spanend
#spanadd
JLabel l1 = new JLabel("adfasdfasdfa");
#spanend
#spanadd
Border eb = BorderFactory.createEtchedBorder();
#spanend
#spanadd
l1.setBorder(new ComponentTitledBorder(c, l1, eb));
#spanend
#spanadd
View in GitHub: Java, Kotlin

#screenshot

解説

  • SwingUtilities.paintComponentBorderにコンポーネントを描画
    • 描画しているだけなのでJCheckBoxなどのコンポーネントが選択されてもイベントが伝わらない
    • このためこのComponentTitledBorderではマウスリスナーを設定してComponent#dispatchEventメソッドで描画しているコンポーネントに以下のようにマウスイベントを転送

サンプルコード

JCheckBox c = new JCheckBox("adfasdf", true);
c.setFocusPainted(false); 
JLabel l1 = new JLabel("adfasdfasdfa");
l1.setBorder(new ComponentTitledBorder(
    c, l1, BorderFactory.createEtchedBorder()));
#spanend
#spanadd
@Override public void mouseClicked(MouseEvent me) {
#spanend
  Component src = me.getComponent();
  tgtCmp.dispatchEvent(SwingUtilities.convertMouseEvent(src, me, tgtCmp));
  src.repaint();
#spanadd
}
#spanend
#spanadd
  • &jnlp;
  • &jar;
  • &zip;

参考リンク

解説

Santhosh Kumar's WeblogComponentTitledBorderを利用しています。 SwingUtilities.paintComponentでBorderにコンポーネントを描画しているため、JComboBoxなどが選択されてもイベントが伝わりません。このためComponentTitledBorderでは、マウスリスナーを設定してComponent#dispatchEventメソッドで描画しているコンポーネントにイベントを飛ばしています。

参考リンク

コメント

コメント