Swing/MoveNonRectangularImage のバックアップ(No.12)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/MoveNonRectangularImage へ行く。
- 1 (2008-11-17 (月) 16:07:53)
- 2 (2011-02-20 (日) 22:03:05)
- 3 (2012-05-16 (水) 14:17:36)
- 4 (2013-01-15 (火) 17:43:55)
- 5 (2015-07-15 (水) 18:58:58)
- 6 (2016-05-19 (木) 20:42:45)
- 7 (2017-03-29 (水) 15:47:04)
- 8 (2018-02-07 (水) 18:37:57)
- 9 (2018-12-20 (木) 11:33:09)
- 10 (2020-11-14 (土) 16:53:38)
- 11 (2022-12-09 (金) 12:46:24)
- 12 (2024-05-05 (日) 18:54:49)
- category: swing folder: MoveNonRectangularImage title: JComponentの形状を変更する tags: [JComponent, JLabel, BufferedImage, DragAndDrop] author: aterai pubdate: 2008-11-17T16:07:53+09:00 description: マウスカーソルに反応するコンポーネントの領域をJLabelに設定した画像アイコンの不透明領域に合わせて変更します。 image:
概要
マウスカーソルに反応するコンポーネントの領域をJLabel
に設定した画像アイコンの不透明領域に合わせて変更します。
Screenshot
Advertisement
サンプルコード
BufferedImage image = ImageIO.read(getClass().getResource("duke.gif"));
JLabel label = new JLabel(new ImageIcon(image)) {
@Override public boolean contains(int x, int y) {
return super.contains(x, y) && ((image.getRGB(x, y) >> 24) & 0xFF) > 0;
}
};
View in GitHub: Java, Kotlin解説
JLabel#contains(int, int)
メソッドをオーバーライドして与えられた座標にある画像の色成分が透明の場合はfalse
を返すよう設定- 画像の透明部分は
JLabel
に含まれないことになりJLabel
に設定したMouseListener
などに反応しない - 非矩形画像の不透明部分だけがマウスでドラッグ可能になる