基本上,Swing仅了解如何绘制透明和不透明的
组件,不知道如何处理半透明的组件,因此使用
基于alpha的背景色会引起问题。
相反,您需要通过控制组件
背景的绘制方式来“伪造”它,例如…
public class FakeTransperencyButton extends JButton { private float alpha = 0; public FakeTransperencyButton(String text) { super(text); setOpaque(false); setBackground(Color.RED); addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { alpha = 0.4f; repaint(); } @Override public void mouseExited(MouseEvent e) { alpha = 0f; repaint(); } }); } @Override public boolean isOpaque() { return false; } public float getAlpha() { return alpha; } protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); g2d.setComposite(AlphaComposite.SrcOver.derive(getAlpha())); g2d.setColor(getBackground()); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); super.paintComponent(g); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)