• 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などを配置します。Santhosh Kumar's WeblogComponentTitledBorderを利用しています。

サンプルコード

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

解説

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

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

@Override public void mouseClicked(MouseEvent me) {
  Component src = me.getComponent();
  tgtCmp.dispatchEvent(SwingUtilities.convertMouseEvent(src, me, tgtCmp));
  src.repaint();
}

参考リンク

コメント