【发布时间】:2011-05-09 09:08:11
【问题描述】:
我正在做一个需要一些自定义摆动组件的项目。到目前为止,我已经制作了一个带有一系列图像的新按钮(Java Metal 外观根本不适合我的 UI)。我已经在这个新组件上实现了MouseListener,这就是我的问题出现的地方。我的小部件在悬停时更改图像,单击等,除了我的 MouseListener 将鼠标输入到整个 GridLayout 容器而不是图像中。所以我有一个大约 200*100 的图像,周围的容器大约是 400*200,当它进入 GridLayout 部分(甚至是它的空白部分)而不是图像上方时,会触发 mouseEntered 方法。我怎样才能使它只在我将鼠标悬停在图像上时才被触发?我尝试设置大小和边界以及其他属性无济于事。
编辑:这是我的问题的演示。正如您所看到的(有点,颜色非常相似)右下角按钮只需输入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);
}
编辑:添加代码部分
【问题讨论】:
-
请发布一个独立的代码示例...让您更容易看到您正在尝试做什么...并且更容易找到问题...
-
'customWidget' 的超类是什么?另外,您的“GridLayout 容器”在哪里设置?
-
customWidget 扩展了 JComponent。 GridLayout 正在用于测试小部件的测试程序中设置。将放一张图片来演示。
标签: java user-interface swing jcomponent mouselistener