カスタムスイングコンポーネントが必要なプロジェクトを行っています。これまでのところ、一連の画像を使用して新しいボタンを作成しました (Java Metal の外観は私の UI にまったく適合しません)。MouseListener
この新しいコンポーネントに実装しましたが、ここで問題が発生します。私のウィジェットは、ホバー、クリックなどで画像を変更しますが、マウスのエントリを画像ではなくコンテナーMouseListener
全体にピックアップします。GridLayout
したがって、約200 * 100の画像があり、周囲のコンテナは約400 * 200であり、画像の上ではなく、そのセクション(空白部分であっても)にmouseEntered
入るとメソッドが起動されます。GridLayout
画像の上にカーソルを置いたときにのみ起動されるようにするにはどうすればよいですか? サイズと境界、およびその他の属性を無駄に設定しようとしました。
編集:これは私の問題のデモンストレーションです。ご覧のとおり (色は非常に似ています)、右下のボタンは、 のセクションに入るだけで強調表示されますGridlLayout
。セクションではなく、実際の画像の上にいるときにのみ強調表示しGridLayout
ます。
MouseListener
表示される画像を切り替えるだけなので、メソッドは追加しません。
public customWidget()
{
this.setLayout(new FlowLayout());
try {
imageDef=ImageIO.read(new File("/home/x101/Desktop/buttonDef.png"));
imageClick=ImageIO.read(new File("/home/x101/Desktop/buttonClick.png"));
imageHover=ImageIO.read(new File("/home/x101/Desktop/buttonHover.png"));
current=imageDef;
} catch (IOException e)
{
e.printStackTrace();
}
this.addMouseListener(this);
}
protected void paintComponent(Graphics g)
{
super.paintComponents(g);
g.drawImage(current, 0, 0, current.getWidth(), current.getHeight(), null);
}
編集:コードセクションを追加