setBackground() com cores em degrade

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

tem como colocar sim veio :smiley:

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

Observe:

[code]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();
}

}[/code]

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);
    }
}