【问题标题】:Difference between cyclic and acyclic gradient in javajava中循环梯度和非循环梯度的区别
【发布时间】:2023-04-10 08:12:01
【问题描述】:

我目前正在学习 Java GUI 开发,在这里我停留在 Gradient。 我想知道循环梯度和非循环梯度的区别?

【问题讨论】:

    标签: java user-interface colors gradient


    【解决方案1】:
    • 循环渐变

    可以简单地作为在渐变区域重复的图案。

    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    class GradientPane extends JComponent {
      public void paint(Graphics g) {
        Graphics2D g2D = (Graphics2D) g;
        Point2D.Float p1 = new Point2D.Float(150.f, 75.f); // Gradient line start
        Point2D.Float p2 = new Point2D.Float(250.f, 75.f); // Gradient line end
        float width = 300;
        float height = 50;
        GradientPaint g1 = new GradientPaint(p1, Color.WHITE, p2, Color.DARK_GRAY, true); // Cyclic
                                                                                          // gradient
        Rectangle2D.Float rect1 = new Rectangle2D.Float(p1.x - 100, p1.y - 25, width, height);
        g2D.setPaint(g1); // Gradient color fill
        g2D.fill(rect1); // Fill the rectangle
        g2D.setPaint(Color.BLACK); // Outline in black
        g2D.draw(rect1); // Fill the rectangle
        g2D.draw(new Line2D.Float(p1, p2));
      }
    }
    public class CyclicGradientPaint {
      public static void main(String[] a) {
        JFrame window = new JFrame("Cyclic Gradient Paint");
        window.setBounds(30, 30, 300, 300);
        window.getContentPane().add(new GradientPane());
        window.setVisible(true);
      }
    }
    
    • 非循环梯度

    图案不会重复,而是随着渐变区域的变化而扩大。

        import java.awt.Color;
        import java.awt.GradientPaint;
        import java.awt.Graphics;
        import java.awt.Graphics2D;
        import java.awt.geom.Line2D;
        import java.awt.geom.Point2D;
        import java.awt.geom.Rectangle2D;
        import javax.swing.JComponent;
        import javax.swing.JFrame;
        class GradientPane extends JComponent {
          public void paint(Graphics g) {
            Graphics2D g2D = (Graphics2D) g;
            Point2D.Float p1 = new Point2D.Float(150.f, 75.f); // Gradient line start
            Point2D.Float p2 = new Point2D.Float(250.f, 75.f); // Gradient line end
            float width = 300;
            float height = 50;
            Rectangle2D.Float rect1 = new Rectangle2D.Float(p1.x - 100, p1.y - 25, width, height);
            GradientPaint g2 = new GradientPaint(p1, Color.WHITE, p2, Color.DARK_GRAY, false); // Acyclic gradient
    
            rect1.setRect(p1.x - 100, p1.y - 25, width, height);
            g2D.setPaint(g2); // Gradient color fill
            g2D.fill(rect1); // Fill the rectangle
            g2D.setPaint(Color.BLACK); // Outline in black
            g2D.draw(rect1); // Fill the rectangle
            g2D.draw(new Line2D.Float(p1, p2));
          }
        }    
        public class AcyclicGradientPaint {
          public static void main(String[] a) {
             JFrame window = new JFrame("Acyclic Gradient Paint");
             window.setBounds(30, 30, 300, 300);
             window.getContentPane().add(new GradientPane());
             window.setVisible(true);
          }
        }
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2016-05-26
      • 1970-01-01
      • 2014-04-30
      • 2012-08-17
      • 2019-11-09
      • 2020-07-16
      • 1970-01-01
      • 2018-08-15
      相关资源
      最近更新 更多