2017-09-20 6 views
0

J'essaye de rendre un arc qui commence par le vert, passe au jaune et finalement au rouge. À l'heure actuelle, il ne fait que passer du vert au rouge en utilisant la méthode standard GradientPaint. Y at-il un moyen de le faire avec 3 couleurs?Comment rendre un arc avec un dégradé de 3 couleurs?

public void paintComponent(Graphics gr) { 
    super.paintComponent(gr); 
    Graphics2D g = (Graphics2D) gr; 

    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

    BasicStroke wideStroke = new BasicStroke(24.0f); 
    g.setStroke(wideStroke); 

    g.setPaint(new GradientPaint(new Point(10, 140), Color.GREEN, new Point(100, 10), Color.RED)); 

    g.draw(new Arc2D.Double(25, 25, 200, 200, 180, -90, Arc2D.OPEN)); 
} 
+1

Vous pouvez utiliser un [ 'LinearGradientPaint'] (https://docs.oracle.com/javase/8/docs/api/java/awt/LinearGradientPaint. html) qui permet de multiples couleurs (et points), [par exemple] (https://stackoverflow.com/questions/12037321/no-repaint-while-resizing-when-using-setpaintgradient/12038987#12038987) et [exemple ] (https://stackoverflow.com/questions/44349038/java-swing-rainbow-border-for-a-jcomponent/44349617#44349617) et [exemple] (https://stackoverflow.com/questions/27641641/creating -a-jlabel-avec-un-gradient/27641940 # 27641940) – MadProgrammer

+0

Cela a fonctionné parfait ly. Je vous remercie. – Gaud

Répondre

1

Merci à

MadProgrammer
public void paintComponent(Graphics gr) { 
    super.paintComponent(gr); 
    Graphics2D g = (Graphics2D) gr; 

    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

    BasicStroke wideStroke = new BasicStroke(24.0f); 
    g.setStroke(wideStroke); 

    LinearGradientPaint lgp = new LinearGradientPaint(
      new Point2D.Float(0, 160), 
      new Point2D.Float(160, 0), 
      new float[] {0f, 0.5f, 1f}, 
      new Color[] {Color.green, Color.yellow, Color.red} 
      ); 

    g.setPaint(lgp); 

    g.draw(new Arc2D.Double(25, 25, 200, 200, 180, -90, Arc2D.OPEN)); 
}