BorderにJComponentを配置
Total: 6603
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
Border
にJCheckBox
やJButton
などを配置します。
Screenshot
Advertisement
サンプルコード
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.paintComponent
でBorder
にコンポーネントを描画- 描画しているだけなので
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();
}
参考リンク
- MyBlog/ComponentTitledBorder at master · santhosh-tekuri/MyBlog
- Borderの右下にJComponentを配置
- TitledBorderにタイトル文字列までの内余白を設定する