Я не могу получить цвет фона моей JPanel в основном классе - PullRequest
1 голос
/ 16 апреля 2019

Проблема в том, что я создаю класс, расширяющий 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

1 Ответ

1 голос
/ 16 апреля 2019

При «догадке» я бы сказал, что вам нужно сделать прозрачным дочерний компонент, используя 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...