[英]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.