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 № 1Se 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.
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();
}
});
}
}