我无法在主类中获取JPanel的背景颜色

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

问题是我创建了一个使用渐变颜色背景扩展JPanel的类,但问题是当我得到它的背景以将其用于其他组件时,我无法获得它的颜色。我想将组件的背景颜色设置为与其他组件相同

我曾尝试使用.getBackground();但它不起作用。我该怎么办才能得到它的背景?

import javax.swing.*;
import java.awt.*;

public class GradientPaintDemo extends JPanel {

private static final int scale = 2;
private static final Color c1 = Color.decode("#00F260");
private static final Color c2 = Color.decode("#0575E6");
private static final int size = (c2.getRed() - c1.getRed()) * scale;

@Override
public Dimension getPreferredSize() {
    return new Dimension(size, size);
}

@Override
protected void paintComponent(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    int w = getWidth();
    int h = getHeight();
    GradientPaint gp = new GradientPaint(20, 0, c1, 20, h, c2);
    g2d.setPaint(gp);
    g2d.fillRect(0, 0, w, h);
    }
}

然后在我的主类

GradientPaintDemo gpd = new GradientPaintDemo();
JPanel panel1 = new JPanel();

gpd.add(panel1);

panel.getBackground();

我想在我的所有面板和按钮上只有一个背景我想看起来如下图所示

image

java swing awt
1个回答
1
投票

在一个“猜测”我会说你需要使用panel1.setOpaque(false)使子组件透明,所以父母将通过它显示。

此外,在“猜测”,在你的size方法中使用getPreferredSize可能会导致你的问题。相反,我将组件的默认布局管理器设置为BorderLayout,让孩子指定所需的大小。

例如,不透明......

Opaque

透明...

Transparent

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.HeadlessException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;

public class Test extends JFrame {

    public static void main(String[] args) {
        new Test();
    }

    public Test() throws HeadlessException {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                GradientPaintDemo gpd = new GradientPaintDemo();
                gpd.setBorder(new EmptyBorder(20, 20, 20, 20));
                JPanel panel = new JPanel();
                panel.setBorder(new EmptyBorder(20, 20, 20, 20));
                panel.add(new JLabel("This is a test"));
                panel.setOpaque(false);
                gpd.add(panel);

                frame.add(gpd);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    public static class GradientPaintDemo extends JPanel {

        private static final int scale = 2;
        private static final Color c1 = Color.decode("#00F260");
        private static final Color c2 = Color.decode("#0575E6");
        private static final int size = (c2.getRed() - c1.getRed()) * scale;

        @Override
        protected void paintComponent(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            int w = getWidth();
            int h = getHeight();
            GradientPaint gp = new GradientPaint(20, 0, c1, 20, h, c2);
            g2d.setPaint(gp);
            g2d.fillRect(0, 0, w, h);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.