有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java图形如何使绘制的字符串透明?

我尝试通过以下操作更改绘制字符串的alpha:

g2d.drawString("HelloWorld", 50, 50, alphaValue);

这导致编译错误

我所要做的就是让一条画好的线慢慢变透明


共 (2) 个答案

  1. # 1 楼答案

    你需要设置颜色

    Color curr = g2d.getColor();
    // Color curr = Color.GREEN;
    g2d.setColor(new Color(curr.getRed(), curr.getGreen(), curr.getBlue(), alphaValue));
    g2d.drawString("HelloWorld", 50, 50);
    
  2. # 2 楼答案

    正如Sergiy所说,您需要更改图形使用的Color的alpha

    下面是一个可以淡出文本的方法的示例

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import javax.swing.Timer;
    
    public class ExampleFrame extends JFrame {
    
        private JPanel drawPanel = new DrawPanel();
        private Timer timer;
        private int alpha = 255;
        private final int TIMER_TICK = 50;
        private final int ALPHA_TICK_VALUE = 3;
    
        private class DrawPanel extends JPanel {
    
            final int PANEL_HEIGHT = 80;
            final int PANEL_WIDTH = 100;
            final int TEXT_MARGIN = 20;
    
            DrawPanel() {
                setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
            }
    
            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                Color color = new Color(0, 0, 0, alpha);
                g.setColor(color);
                g.drawString("Hello World", TEXT_MARGIN,
                        PANEL_HEIGHT / 2 + g.getFontMetrics().getHeight() / 2);
            }
    
        }
    
        public void createAndShow() {
            getContentPane().add(drawPanel);
            timer = new Timer(TIMER_TICK, new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    alpha -= ALPHA_TICK_VALUE;
                    if (alpha >= 0) {
                        drawPanel.repaint();
                    } else {
                        alpha = 0;
                        timer.stop();
                    }
                }
            });
            pack();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
            timer.start();
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    ExampleFrame ef = new ExampleFrame();
                    ef.createAndShow();
                }
            });
        }
    }