我正在做一个项目,我需要一些自定义的swing组件。到目前为止,我已经制作了一个带有一系列图像的新按钮(Java Metal外观根本不符合我的UI)。我在这个新组件上实现了MouseListener
,这是我的问题出现的地方。我的小工具在悬停时更改图片,点击等,除了我的MouseListener
拿起鼠标进入整个GridLayout
容器,而不是进入图像。所以我有一个大约200 * 100的图像,周围的容器大约是400 * 200,并且mouseEntered
方法在它进入GridLayout
部分(甚至它的空白部分)而不是在图像上时被触发。我怎样才能让它在我悬停在图像上时才被解雇?我试着设置大小和边界以及其他属性无济于事。Java swing JComponent“size”
编辑:这是我的问题的演示。正如您所看到的(颜色非常相似),只需输入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);
}
编辑:添加代码段
请发布一个自包含的代码示例...使您更容易看到您正在尝试做什么...并更容易找到问题... – 2010-11-13 00:16:08
'customWidget'的超类是什么?另外,你的'GridLayout容器'在哪里设置? – 2010-11-13 00:36:25
customWidget扩展了JComponent。 GridLayout正在测试程序im中设置,用于测试小部件。将提出一个图像来演示。 – Alex 2010-11-13 00:43:55