/ / Como fazer o gradiente de fundo de um JPanel - java, swing, jpanel, gradient, paintcomponent

Como fazer o gradiente de fundo de um JPanel - java, swing, jpanel, gradient, paintcomponent

Eu quero saber como fazer gradiente de fundoque está em outro JPanel. Muitos artigos encontrados na internet, mas todos eles tinham demonstrado como substituir o paintComponent () do JPanel não como fazer para um jPanel que está dentro dele.
Eu uso o Netbeans IDE. Eu criei uma nova classe JPanel e poderia substituir seu paintComponent (). Eu tenho outro jpanel (arrastado e solto no JPanel pai). Eu quero fazer seu gradiente de fundo.

Aqui está como eu tentei para pai. Funcionou. Como posso substituir isso por criança jpanel?

public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Color color1 = getBackground();
Color color2 = color1.darker();
int w = getWidth();
int h = getHeight();
GradientPaint gp = new GradientPaint(
0, 0, color1,
0, h, color2);

g2d.setPaint(gp);
g2d.fillRect(0, 0, w, h);
}

Respostas:

10 para resposta № 1

Se você tiver o cuidado de invocar super.paintComponent(g), você pode adicionar o gradiente diretamente ao painel, como mostrado abaixo.

Para fins de usabilidade, resistiria à tentação de tentar tornar os componentes individuais transparentes. Note também que opacidade é controlado pelo Look & Feel.

GradientPanel

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
* @see http://stackoverflow.com/q/12220853/230513
*/
public class GradientPanel extends JPanel {

private static final int N = 32;

public GradientPanel() {
this.setBorder(BorderFactory.createEmptyBorder(N, N, N, N));
this.add(new JLabel("Test:", JLabel.CENTER));
this.add(new JTextField("This is a test."));
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Color color1 = getBackground();
Color color2 = color1.darker();
int w = getWidth();
int h = getHeight();
GradientPaint gp = new GradientPaint(
0, 0, color1, 0, h, color2);
g2d.setPaint(gp);
g2d.fillRect(0, 0, w, h);
}

private void display() {
JFrame f = new JFrame("GradientPanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new GradientPanel().display();
}
});
}
}