微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我使用 setBounds 时,Jcomponents 的 repaint 方法会绘制一个白色矩形

如何解决当我使用 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
    }

但它没有按照我想要的方式工作,按钮确实移动了,但我在图标后面看到了这个白色矩形:

enter image description here

当我不移动按钮而只是改变前景颜色时,也会发生同样的情况。

有没有办法在不使用认布局的情况下防止这种情况发生?

解决方法

您可以使用以下方法将标签居中,而不是使用空布局:

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 举报,一经查实,本站将立刻删除。