JComponentの形状を変更する
Total: 8961
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
マウスカーソルに反応するコンポーネントの領域を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
などに反応しない - 非矩形画像の不透明部分だけがマウスでドラッグ可能になる