JLabel com Background gradiente em um JPanel com background customizado [RESOLVIDO]

3 respostas
D

Bom pessoal, estou quebrando a cabeça faz 3 dias com este problema.

É o seguinte:

Tenho um JPanel com 4 JLabel.
Meu JPanel pussui um background que é uma imagem que coloquei assim:

JPanel panel = new JPanel(){      
			 public void paintComponent(Graphics g) {
				 super.paintComponent(g);
				 Image imagem = new ImageIcon("resources/bgToolbar.png").getImage();
				 g.drawImage(imagem, 0, 0, this);
			 }
		};

Já o meu JLabel criei assim:

JLabel label = new JLabel() {
	public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        int w = getWidth();
        int h = getHeight();
        GradientPaint gradient = new GradientPaint(20, 0, color1, 20, h, color2, false);
        g2.setPaint(gradient);
        g2.fillRect(0, 0, w, h);
        super.paintComponent(g);
   }
		};

adiciono o label no panel:

panel.add(label);

Adiciono um Listener ao JLabel para mudar a cor do background do meu panel quando passar o mouse em cima do label para um background gradiente:

label.addMouseListener(new MouseListener() {

			public void mouseClicked(MouseEvent e) {}
			public void mouseEntered(MouseEvent e) {
				label.setOpaque(false);
				label.repaint();
			}
			public void mouseExited(MouseEvent e) {
				label.setOpaque(true);
				label.repaint();
			}
			public void mousePressed(MouseEvent e) {}
			public void mouseReleased(MouseEvent e) {}
		});

E o problema é este: o background do label fica naquela cor padrão meio acinzentada, e quando passamos o mouse por cima, a cor

gradiente fica certinho como o background.

OBS: quando não sobrecarrego o método paintComponent(Graphics g) do meu JLabel, o background fica normal do meu JPanel.

Nunca usei o SwingX, será que o JXLabel já faz esse esquema para o background gradiente?

Será que deu para entender meu problema. Alguém aí pode ajudar?

vlw

3 Respostas

D

Ninguém???

D

Criei uma classe para auxiliar o problema.

Em vez de instanciar um JLabel, eu instancio a minha classe Colors que por sua vez extende a classe JLabel. Tendo assim mais controle sobre meus JLabels.

Só que ainda não consegui fazer com que meu background original permaneca depois que a cor gradiente é exibida.

Segue minha classe Colors:

package assinador.gui.util;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JLabel;

public class Colors extends JLabel {

	private Color color1;
    private Color color2;
        
    public Colors(Color c1, Color c2) {
        this.color1 = c1;
        this.color2 = c2;
        //setContentAreaFilled(false);  // *
        
        this.addMouseListener(new MouseListener() {

        	public void mouseClicked(MouseEvent e) {}
			public void mouseEntered(MouseEvent e) {
				getCurrentJLabel().setOpaque(false);
				getCurrentJLabel().repaint();
			}
			public void mouseExited(MouseEvent e) {
				getCurrentJLabel().setOpaque(true);
				getCurrentJLabel().repaint();
			}
			public void mousePressed(MouseEvent e) {}
			public void mouseReleased(MouseEvent e) {}
    	});
    }
    
	public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        int w = getWidth();
        int h = getHeight();
        GradientPaint gradient = new GradientPaint(20, 0, color1, 
        										   20, h, color2, 
        										   false);
        g2.setPaint(gradient);
        g2.fillRect(0, 0, w, h);
        super.paintComponent(g);
    }
	
	public JLabel getCurrentJLabel() {
		return this;
	}
}

Tem alguém fera em swing ae?

D

Ae pessoal,

Estou vindo aqui novamente para compartilhar com vcs a solução da minha dúvida.

O usuário godinho do JavaFree me deu a solução.

Segue abaixo o que ele disse:

Criado 12 de setembro de 2007
Ultima resposta 17 de set. de 2007
Respostas 3
Participantes 1