【问题标题】:NetBeans JPanel gradient backgroundNetBeans JPanel 渐变背景
【发布时间】:2013-10-27 02:16:30
【问题描述】:

有几篇关于如何向 JPanel 添加渐变的帖子,但它们都假设我们是从头开始对 JPanel 进行硬编码。谁能解释如何向使用 NetBeans GUI 构建器构建的 JPanel 添加渐变? (我是一名 Java 新手......对处理更有经验,所以如果你不介意回答,就好像我是一个 9 岁的孩子......)。

我有一个名为“Home”的 JPanel,我想在上面添加渐变。在 NetBeans 中,在自定义代码菜单选项下,我可以看到:

Home.setBackground(new java.awt.Color(153, 204, 255));

这里有几篇包含此代码变体的帖子:

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D)g;
    int w = getWidth();
    int h = getHeight();

    GradientPaint gp = new GradientPaint(
            0, 0, Color.white,
            0, h, Color.black);

    g2d.setPaint(gp);
    g2d.fillRect(0, 0, w, h);
}

但是我应该把它放在哪里,以及如何将它附加到我的主面板? g 指的是什么?

感谢您的宝贵时间。

【问题讨论】:

  • 您需要暂时搁置 NetBeans 代码生成并尝试手动编写 Swing 代码,直到您理解该库为止,因为代码生成器可能会妨碍您理解。一旦你熟悉了这个库,那么如果需要的话,一定要使用代码生成器,但在那之前不要。您首先必须了解 Swing 基础知识,例如“g 指的是什么”(检查herehere)。

标签: java swing netbeans gradient


【解决方案1】:

您必须创建自己的面板类并扩展 JPanel。我从未使用过 NetBeans GUI 构建器来了解您是否可以使用它添加自定义组件。 g 指的是作为方法参数的 Graphics 对象。

public class GradientPanel extends JPanel {

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g.create();
        int w = getWidth();
        int h = getHeight();

        GradientPaint gp = new GradientPaint(
                0, 0, Color.white,
                0, h, Color.black);

        g2d.setPaint(gp);
        g2d.fillRect(0, 0, w, h);

        g2d.dispose();
    }
}

那就用 GradientPanel 代替 JPanel。

如果您想了解这幅画,请参阅相关教程,但您可以或多或少地复制并粘贴该代码并使用它:

http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html

【讨论】:

  • 不要处理不是您创建的图形上下文,这实际上可能会阻止您正在绘制的内容在某些系统上呈现
  • @MadProgrammer 是的,你是对的。甚至没有看到他们所做的只是投射它。只需复制和粘贴。 =/
  • 您可以改为使用Graphics2D g2d = (Graphics2D)g.create(); 并添加dispose 调用,这实际上是一个更好的解决方案;)
  • @MadProgrammer 出于好奇,您为什么认为这在技术上更好?只是为了安全,因为对参数 Graphics 对象的更改会传递到后续的绘制方法(paintBorder/paintChildren)?出于这个原因,我个人总是制作副本,但从未听说它是首选。
  • 创建图形上下文的副本可防止您忘记将图形上下文重置回原来的状态。 Graphics 上下文是一个共享上下文,因此它用于绘制所有其他组件。前段时间有一个奇怪的问题,因为一位开发人员一直在设置抗锯齿但没有重置它,这意味着当您将鼠标移到屏幕上时,您会得到这些有趣的绘画更新:P
【解决方案2】:

NetBeans GUI Builder 不想使用任何构造函数,除了没有参数的默认构造函数。由于这个原因,如果 JPanel 的扩展需要构造函数的参数,它们将很难使用。需要重写paintComponent(),并且需要定义默认构造函数。 要使用下面的代码(改编自上面),请在“源包”下的项目中创建一个文件夹并添加下面的类文件。从调色板拖放到设计画布上。

import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GradientPaint;
import java.awt.Color;
public class GradientPanel extends JPanel {

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g.create();
        int w = getWidth();
        int h = getHeight();

        GradientPaint gp = new GradientPaint(0, 0, Color.white, 0, h, Color.black);

        g2d.setPaint(gp);
        g2d.fillRect(0, 0, w, h);

        g2d.dispose();
    }
    public GradientPanel(){
   // added default constructor
    }
}

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多