如何解决当我使用 setBounds 时,Jcomponents 的 repaint 方法会绘制一个白色矩形
我正在尝试为一个小游戏构建我的自定义按钮,我使用了一个带有如下图标的 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 图像始终具有白色背景。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。