如何制作JPanel的背景渐变

我想知道如何制作另一个JPanel中的背景渐变。 在互联网上发现了许多文章,但是所有这些文章都说明了如何覆盖JPanel的paintComponent()而不是如何处理它内部的jPanel。
我使用Netbeans IDE。 我创建了一个新的JPanel类,可以覆盖它的paintComponent()。 我有另一个jpanel(拖放到父JPanel)。 我想制作它的背景渐变。

这是我为父母试过的方式。 有效。 如何为儿童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); } 

如果您小心调用super.paintComponent(g) ,则可以将渐变直接添加到面板,如下所示。

对于可用性,我会抵制试图使各个组件透明化的诱惑。 另请注意, 不透明度由外观和感觉控制。

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(); } }); } } 
Interesting Posts