概要

BorderJCheckBoxJButtonなどを配置します。

サンプルコード

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

解説

  • SwingUtilities.paintComponentBorderにコンポーネントを描画
    • 描画しているだけなのでJCheckBoxなどのコンポーネントが選択されてもイベントが伝わらない
    • このためこのComponentTitledBorderではマウスリスナーを設定してComponent#dispatchEventメソッドで描画しているコンポーネントに以下のようにマウスイベントを転送
    • 動作中にLookAndFeelが変更された場合、Borderに描画するコンポーネントはComponentTreeに含まれないので手動で更新(SwingUtilities.updateComponentTreeUI(...)を適用)する必要がある
@Override public void mouseClicked(MouseEvent me) {
  Component src = me.getComponent();
  tgtCmp.dispatchEvent(SwingUtilities.convertMouseEvent(src, me, tgtCmp));
  src.repaint();
}

参考リンク

コメント