gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:40:48 25 4
gpt4 key购买 nike

问题是我创建了一个用渐变颜色背景扩展 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

最佳答案

根据“猜测”,我会说您需要使用 panel1.setOpaque(false) 让子组件透明,这样父组件就会透过它显示出来。

此外,据“猜测”,在 getPreferredSize 方法中使用 size 可能会给您带来问题。相反,我将组件的默认布局管理器设置为 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);
}
}
}

关于java - 我无法在主类中获取 JPanel 的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55700423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com