【问题标题】:I keep getting a null error but I do not know what to set g equal to, to make it work [duplicate]我不断收到空错误,但我不知道将 g 设置为等于什么才能使其工作[重复]
【发布时间】:2013-10-02 20:09:24
【问题描述】:

我有这段代码,我试图让图形在点击后出现,我试图找出如何做到这一点,但每次我尝试运行它时,它都会出错,我不知道如何修复以使其正常工作。

Exception in thread "main" java.lang.NullPointerException
    at memor.main(memor.java:131)

Graphics g= pan.getGraphics();  

代码

import java.awt.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridLayout;

import javax.swing.JButton;

public class memor extends JFrame
{
public static void main(String args[]){

final JPanel pan;
GridLayout h=new GridLayout(3,3);

pan =new JPanel(h);
JButton button1= new JButton("1");
pan.add(button1);
if (button1.isEnabled()){
Graphics g= pan.getGraphics();
g.setColor(new Color(156, 93, 82));
g.fill3DRect(21,3,7,12, true);
g.setColor(new Color(156,23,134));
g.fillOval(1,15,15,15);
g.fillOval(16,15,15,15);
g.fillOval(31,15,15,15);
g.fillOval(7,31,15,15);
g.fillOval(22,31,15,15);
g.fillOval(16,47,15,15);
}}
}

【问题讨论】:

  • Graphics g= pan.getGraphics(); 这不是处理custom painting 的正确方法。此外,将自定义绘画与您似乎想要的组件相结合是很棘手的。此外,对代码块使用一致且合乎逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。
  • 如果您只是选择忽略建议,我们为什么还要麻烦帮助您:previous similar question。如果建议使您感到困惑,请在评论中要求澄清,但不要盲目地忽略它,不断犯同样的错误,然后想知道为什么您的代码不起作用。
  • 这是我第三次看到这段代码,至少我第三次看到人们(包括我自己)试图向你解释这不是你如何进行自定义绘画或处理Graphics。查看performing custom painting 了解更多详情。投票结束...

标签: java swing graphics java-2d


【解决方案1】:

JComponent 中的Graphics 对象在必须绘制组件时被初始化。这意味着您必须在访问Graphics 对象之前渲染JPanel

因此,您必须将JPanel 添加到JFrame(或者可能是JWindow),设置窗口可见,然后您将能够使用组件的@ 987654329@对象。

无论如何,自定义绘图应该覆盖JPanelpaintComponent 方法。

【讨论】:

  • “设置窗口可见,然后你就可以使用组件的 Graphics 对象了。” 但他们在该示例中使用Graphics 对象的确切方式是错误的,将在下一个paint(..) 中删除。很高兴看到您添加了第 3 段.. +1
  • @AndrewThompson 谢谢,我添加了第 3 段来说明这不是正确的做法,基本上前两段解决了获取空 Graphics 对象的问题,但是正确的方法是使用paintComponent :)
  • @AndrewThompson:切,她被告知了这一切previously,但她选择忽略这个建议。
  • @HovercraftFullOfEels 让我想知道为什么这些类型甚至会打扰提问。他们是否打算一直问他们,直到他们听到他们想要的答案? ..获得免费代码? ..获得“最重复的问题”奖? :(
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2015-08-25
  • 2021-12-18
  • 2020-08-02
相关资源
最近更新 更多