[英]JButton icon transparent artefacts
有人可能会认为我正在发表双重看法,因为我已经在这里问过这个问题: JButton alpha背景随鼠标悬停而变化
但是我有一些问题,不是与使用透明色的Alpha背景按钮有关,而是与使用透明图标(.png)的按钮有关。 我已经尝试了很多东西,但是我仍然有人工制品,我真的不明白为什么。
这是我的代码:
public class PanelPosition extends JPanel
{
private JButton leftArrow, rightArrow;
public PanelPosition (int width, int height)
{
this.setPreferredSize(new Dimension(width,height));
this.setBackground(new Color(0,0,0,0));
JLabel position = new JLabel("support", JLabel.CENTER);
position.setForeground(Color.white);
leftArrow = new JButton(new AlphaImageIcon(new ImageIcon("pictures\\left arrow.png"),1));
rightArrow = new JButton(new AlphaImageIcon(new ImageIcon("pictures\\right arrow.png"),1));
leftArrow.setBackground(new Color (0,0,0,0));
rightArrow.setBackground(new Color (0,0,0,0));
leftArrow.setPreferredSize(new Dimension(leftArrow.getIcon().getIconWidth(), leftArrow.getIcon().getIconHeight()));
rightArrow.setPreferredSize(new Dimension(rightArrow.getIcon().getIconWidth(), rightArrow.getIcon().getIconHeight()));
leftArrow.setOpaque(false);
leftArrow.setFocusPainted(false);
leftArrow.setBorderPainted(false);
leftArrow.setContentAreaFilled(false);
leftArrow.addMouseListener(new MouseAdapter()
{
@Override
public void mouseEntered(MouseEvent evt)
{
leftArrow.setIcon(new AlphaImageIcon(new ImageIcon("pictures\\left arrow.png"), (float)0.7));
}
@Override
public void mouseExited(MouseEvent evt)
{
leftArrow.setIcon(new AlphaImageIcon(new ImageIcon("pictures\\left arrow.png"), (float)0.3));
}
});
rightArrow.setOpaque(false);
rightArrow.setFocusPainted(false);
rightArrow.setBorderPainted(false);
rightArrow.setContentAreaFilled(false);
rightArrow.addMouseListener(new MouseAdapter()
{
@Override
public void mouseEntered(MouseEvent evt)
{
rightArrow.setIcon(new AlphaImageIcon(new ImageIcon("pictures\\right arrow.png"), (float)0.7));
}
@Override
public void mouseExited(MouseEvent evt)
{
rightArrow.setIcon(new AlphaImageIcon(new ImageIcon("pictures\\right arrow.png"), (float)0.3));
}
});
add(leftArrow);
add(position);
add(rightArrow);
}
}
对于那些AlphaImageIcon提出问题的人,我在这里找到了这个类,我就简单地接受它: https : //github.com/griffon/griffon-javatips-plugin/blob/master/src/main/com/wordpress/tipsforjava/ swing / AlphaImageIcon.java
感谢您的帮助,对不起。
有些人可能会认为我正在发表双重看法
是的,问题略有不同,但问题相同。
但我有一些问题,与使用透明色的Alpha背景按钮无关,而与使用透明图标的按钮有关
是的,问题仍然出在Alpha背景上。 您正在面板上使用Alpha背景:
this.setBackground(new Color(0,0,0,0));
将该面板添加到框架中时,请摆脱上述声明或使用AlphaContainer
。
leftArrow.setBackground(new Color (0,0,0,0));
rightArrow.setBackground(new Color (0,0,0,0));
另外,摆脱上面的两个语句,因为它们在以后使用时不起作用:
leftArrow.setOpaque(false);
rightArrow.setOpaque(false);
这意味着不要绘制背景。 因此,将背景涂成任何颜色都不会起作用。 重读我的答案,并按照您上一个问题的博客链接!
同样,我博客链接中的摘要是,只要您在我建议的两种解决方案之一(可能还有其他)中使用,则在任何组件上使用alpha时,都会出现绘画问题。
同样,不确定为什么您的按钮有3种状态。 一旦将鼠标移到按钮上,它将永远不会回到完全不透明的状态。 如果您只是想产生过渡效果,则可能应该使用:
leftArrow.setRolloverIcon(...);
而不是尝试自己管理MouseListener。 然后,您将有两个状态,一个为过渡状态,另一个为默认状态。 使用这种方法,您还将只读取一次图标,而不是每次鼠标进入/退出按钮时都读取一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.