setBackground() com cores em degrade

2 respostas
A

Opa galera… a duvida é a seguinte:

Tem como colocar um fundo em degradê sem ser imagem? Assim como o fundo do gerenciador de downloads da sun? que começa com azul claro e vai escurecendo

Abraços

2 Respostas

mestreshake

tem como colocar sim veio :smiley:

ViniGodoy

Só sobrescrevendo o método PaintComponent de um JPanel, ou o Paint de um JFrame.
Eu prefiro a primeira opção.

Observe:
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Point2D;

import javax.swing.JPanel;

public class JGradientPanel extends JPanel {
    private Color finalColor;
    private Color initialColor;
    
    public JGradientPanel(Color initialColor, Color finalColor) {
        if (initialColor == null)
            throw new IllegalArgumentException("Invalid initial color!");
        if (finalColor == null)
            throw new IllegalArgumentException("Invalid final color!");
        
        this.initialColor = initialColor;
        this.finalColor = finalColor;
    }
 
    public void setInitialColor(Color color) {
        this.initialColor = color;
        invalidate();
    }

    public void setFinalColor(Color color) {
        this.finalColor = color;
        invalidate();
    }

    public Color getInitialColor() {
        return initialColor;        
    }

    public Color getFinalColor() {
        return finalColor;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        if (!isOpaque()) {
            return;
        }
        GradientPaint paint = new GradientPaint(
                new Point2D.Float(getWidth() / 2, 0), initialColor, 
                new Point2D.Float(getWidth() / 2, getHeight()), finalColor);
        g2d.setPaint(paint);
        g2d.fillRect(0, 0, getWidth(), getHeight());
        g2d.dispose();
    }
}
Para testar:
import java.awt.Color;
import javax.swing.JFrame;

public class Teste {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JGradientPanel panel = new JGradientPanel(Color.WHITE, Color.BLUE);
        frame.setContentPane(panel);
        frame.setSize(640, 480);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }
}
Criado 26 de maio de 2008
Ultima resposta 26 de mai. de 2008
Respostas 2
Participantes 3