如何为JPanel创建渐变?另外,在Java中如何调用类中的类?

如何为JPanel创建渐变?另外,在Java中如何调用类中的类?,java,swing,jpanel,gradient,Java,Swing,Jpanel,Gradient,我正在制作一个JavaGUI,我在互联网上搜索了2个小时,了解如何为JPanel生成渐变。下面的代码是我所拥有的,但是当运行时渐变不会显示。怎么了 我在互联网上试过很多类似问题的帖子,但都不起作用。我尝试过很多版本,但我也不知道如何在类中运行类。有人能帮我吗 class TestPanel extends JPanel{ @Override protected void paintComponent(Graphics g) { super.paintCompone

我正在制作一个JavaGUI,我在互联网上搜索了2个小时,了解如何为JPanel生成渐变。下面的代码是我所拥有的,但是当运行时渐变不会显示。怎么了

我在互联网上试过很多类似问题的帖子,但都不起作用。我尝试过很多版本,但我也不知道如何在类中运行类。有人能帮我吗

class TestPanel extends JPanel{
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        int w = getWidth();
        int h = getHeight();
        Color color1 = Color.BLUE;
        Color color2 = Color.GREEN;
        GradientPaint gp = new GradientPaint(0, 0, color1, 0, h, color2);
        g2d.setPaint(gp);
        g2d.fillRect(0, 0, w, h);
    }
} //this is nested within the main class
//一些代码

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
        CreateGUI cg = new CreateGUI();
        cg.create();    //previous method (not mentioned here)           
            CreateGUI.TestPanel tp = cg.new TestPanel(); //problem
            JPanel panel = new JPanel();
            f.add(panel);
            f.setSize(800, 600);
            f.setLocationRelativeTo(null);
        f.getContentPane().setLayout(null);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
        }
    });
}
我希望有一个梯度,但没有;JPanel的背景仍然是白色的

  • TestPanel
    的实例从未添加到任何内容中
  • null
    布局将阻止组件的大小和位置,因此即使您执行了上一步,您也不会看到任何内容
  • 除非要向其中添加子组件,否则应该提供一个大小提示,以便布局管理器能够处理一些事情
  • 例如:


    您永远不会创建
    TestPane
    的实例,也不会将其添加到任何内容中。也不要使用
    null
    布局
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class Test {
    
        public static void main(String[] args) {
            new Test();
        }
    
        public Test() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JFrame frame = new JFrame();
                    frame.add(new TestPanel());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        class TestPanel extends JPanel {
    
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 200);
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2d = (Graphics2D) g.create();
                g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
                int w = getWidth();
                int h = getHeight();
                Color color1 = Color.BLUE;
                Color color2 = Color.GREEN;
                GradientPaint gp = new GradientPaint(0, 0, color1, 0, h, color2);
                g2d.setPaint(gp);
                g2d.fillRect(0, 0, w, h);
                g2d.dispose();
            }
        }
    }