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

问题描述 投票:0回答:1

我正在制作Java GUI,并且已经在互联网上搜索了两个小时,以了解如何为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的背景仍然是白色

java swing jpanel gradient
1个回答
0
投票
  1. TestPanel的实例从不添加任何内容>
  2. null布局将阻止调整组件的大小和位置,因此即使您执行了上一步,您也不会看到任何内容
  3. 除非您要向其添加子组件,否则应提供大小调整提示,以便布局管理器可以使用某些东西。
  4. 例如:

Example

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();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.