问题描述
我正在尝试为一个小游戏构建我的自定义按钮,我使用了一个带有如下图标的 JLabel
:
JLabel playButton = new JLabel("Play!",Images.getWoodImage(),JLabzl.CENTER);
playButton.setFont(Fonts.getBlueBerryFont());
playButton.setHorizontalTextPosition(SwingConstants.CENTER);
playButton.setVerticalTextPosition(SwingConstants.CENTER);
playButton.setBounds(230,400,300,100);
问题是我想让我的按钮在光标进入时移动一点;所以我不使用默认布局(我放了 this.setLayout(null)
)。因此,对于我的按钮的 MouseListener,我使用了以下代码块:
@Override
public void mouseEntered(MouseEvent mouseEvent) {
playButton.setBounds(240,410,100); // x + 10 & y + 10
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
playButton.setBounds(230,100); // reverse the move
}
但它没有按照我想要的方式工作,按钮确实移动了,但我在图标后面看到了这个白色矩形:
当我不移动按钮而只是改变前景颜色时,也会发生同样的情况。
有没有办法在不使用默认布局的情况下防止这种情况发生?
解决方法
您可以使用以下方法将标签居中,而不是使用空布局:
panel.setLayout( new GridBagLayout() );
playButton.setBorder( new EmptyBorder(0,10,10) );
panel.add(playButton,new GridBagConstraints());
然后在 MouseListener 中尝试:
@Override
public void mouseEntered(MouseEvent mouseEvent) {
playButton.setBorder( new EmptyBorder(10,0) );
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
playButton.setBorder( new EmptyBorder(0,10) );
}
这应该会产生图像移动的效果。
,试试setOpaque(false)
。还要确保您使用 .png 作为图片,因为 .jpg 图像始终具有白色背景。