【问题标题】:Graphics - How do I make drawn strings transparent?图形 - 如何使绘制的字符串透明?
【发布时间】:2017-02-23 14:58:00
【问题描述】:

我尝试通过这样做来更改绘制字符串的 alpha:

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

这导致编译错误。

我要做的就是让绘制的字符串慢慢变透明。

【问题讨论】:

  • 定义了变量“alphaValue”。似乎 'drawString()' 没有用于 alpha 值的字段。我不知道。 :c
  • “对不起,如果我没有达到这篇文章的要求。我很累,只想快点学习。:S” 睡一觉,继续你自己的问题。如果您在提出问题时觉得有必要提及此类事情,则表明您不应该提出此类问题。

标签: java string swing graphics transparency


【解决方案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】:

    正如 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();
                }
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-05
      • 2012-06-06
      • 1970-01-01
      • 2020-10-24
      • 2010-09-26
      • 2016-05-25
      • 1970-01-01
      相关资源
      最近更新 更多