Java paint类不显示矩形数组

Java paint类不显示矩形数组,java,swing,Java,Swing,我试图打印一个矩形数组,并在运行时出错 我将一个数字从我的主类发送到我的绘画类中的getdatafordisplay(我发送的数字)函数,它只是一个普通的int,比如5。这会在if语句中进行一些检查,以便我们知道在何处显示矩形。到目前为止,这在我的程序中运行良好 现在它将它保存在rectangle类中,然后在运行时显示所有的矩形 还值得一提的是,我从该网站了解到,一位用户在此处发布了“主动方法”: 我的绘画课是: class mainPanel extends JPanel { int

我试图打印一个矩形数组,并在运行时出错

我将一个数字从我的主类发送到我的绘画类中的
getdatafordisplay(我发送的数字)
函数,它只是一个普通的int,比如5。这会在if语句中进行一些检查,以便我们知道在何处显示矩形。到目前为止,这在我的程序中运行良好

现在它将它保存在rectangle类中,然后在运行时显示所有的矩形

还值得一提的是,我从该网站了解到,一位用户在此处发布了“主动方法”:

我的绘画课是:

class mainPanel extends JPanel
{
    int processes, storedProcesses;

    //for inital values of rectangles
    int xCoor = 0;
    int yCoor = 0;
    int width = 10;
    int height = 50;

    static int x = 100;
    int [] y = {100,150,200,250,300,350,400,450,500,550};

    private ArrayList<ColoredRectangle> coloredRectangles = new ArrayList<ColoredRectangle>();

    class ColoredRectangle
    {
          private Rectangle rectangle;

          public ColoredRectangle()
          {
                 System.out.println("REC");
          }

        public Rectangle getRectangle()
        {
              return rectangle;
        }
    }

    public void addRectangle(ColoredRectangle rectangle)
    {
          coloredRectangles.add( rectangle );
          repaint();
    }

    public mainPanel(int processFROMmain)
    {
        //just some jpanel looks here
    }

    public Dimension getPreferredSize() {
        return new Dimension (1000, 1000);
    }

    public void getDataForDisplay (int proc)
    {
    //the method checks the value from "proc" to see where to display a rectangle on screen. proc comes from user i.e 5
    int loop = 0;

    while (loop < storedProcesses)
    {
        int breakloop = 0;

        if (proc == loop)
        {
            xCoor =  x;
            yCoor = y[loop];
            x = x + 10;
            breakloop = 1;
            Rectangle r = new Rectangle(xCoor, yCoor, width, height);
            ColoredRectangle cr = new ColoredRectangle();
            addRectangle( cr );
        }

        if (breakloop == 1)
        {
            break;
        }

        loop++;
    }
 }

  public void paintComponent(Graphics g) {
       super.paintComponent(g);   

    for (mainPanel.ColoredRectangle cr : coloredRectangles)
        {
        g.setColor(Color.RED );
        Rectangle r = cr.getRectangle();
        g.drawRect(r.x, r.y, r.width, r.height);
        }
    }  
}
class主面板扩展了JPanel
{
int进程、StoredProcess;
//对于矩形的初始值
int xCoor=0;
int yCoor=0;
整数宽度=10;
整数高度=50;
静态int x=100;
int[]y={100150200250300350400450500550};
private ArrayList coloredlectangles=new ArrayList();
类彩色反射角
{
私有矩形;
公共色射角()
{
系统输出打印项次(“REC”);
}
公共矩形getRectangle()
{
返回矩形;
}
}
公共空白添加矩形(彩色矩形)
{
彩色矩形。添加(矩形);
重新油漆();
}
公共主面板(int processFROMmain)
{
//这里只是一些jpanel的外观
}
公共维度getPreferredSize(){
返回新维度(10001000);
}
public void getDataForDisplay(int proc)
{
//该方法检查“proc”中的值,以查看在屏幕上显示矩形的位置
int循环=0;
while(循环<存储过程)
{
int breakloop=0;
if(proc==循环)
{
xCoor=x;
yCoor=y[loop];
x=x+10;
breakloop=1;
矩形r=新矩形(xCoor、yCoor、宽度、高度);
ColoredRectangle cr=新的ColoredRectangle();
添加矩形(cr);
}
如果(断开循环==1)
{
打破
}
loop++;
}
}
公共组件(图形g){
超级组件(g);
对于(mainPanel.ColoredRectangle cr:coloredRectangles)
{
g、 setColor(Color.RED);
矩形r=cr.getRectangle();
g、 drawRect(r.x、r.y、r.宽度、r.高度);
}
}  
}
我得到的错误是:

线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常
在mainPanel.paintComponent(main.java:275)上
位于javax.swing.JComponent.paint(JComponent.java:1045)
位于javax.swing.JComponent.paintChildren(JComponent.java:878) 位于javax.swing.JComponent.paint(JComponent.java:1054) 位于javax.swing.JComponent.paintChildren(JComponent.java:878) 位于javax.swing.JComponent.paint(JComponent.java:1054) 位于javax.swing.JLayeredPane.paint(JLayeredPane.java:585) 位于javax.swing.JComponent.paintChildren(JComponent.java:878) 位于javax.swing.JComponent.paintooffscreen(JComponent.java:5217) 位于javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 位于javax.swing.repainmanager.paint(repainmanager.java:1249) 位于javax.swing.JComponent.paint(JComponent.java:1031) 位于java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39) 位于sun.awt.sungraphicscalback.runOneComponent(sungraphicscalback.java:78) 位于sun.awt.sungraphicscalback.runComponents(sungraphicscalback.java:115) 位于java.awt.Container.paint(Container.java:1967) 位于java.awt.Window.paint(Window.java:3877) 在javax.swing.repaitmanager$3.run(repaitmanager.java:819) 在javax.swing.repaitmanager$3.run(repaitmanager.java:796) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:796) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:769) 位于javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718) 在javax.swing.repaitmanager.access$1100(repaitmanager.java:62) 在javax.swing.repaitmanager$ProcessingRunnable.run(repaitmanager.java:1677) 在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) 在java.awt.EventQueue.access$200(EventQueue.java:103) 位于java.awt.EventQueue$3.run(EventQueue.java:694) 在java.awt.EventQueue$3.run(EventQueue.java:692) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:703) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)


coloredlectangle
对象中,实际上从未存储
矩形
对象。您正在初始化一个变量,
私有矩形但仅此而已。你应该编辑你的代码

private Rectangle rectangle;

    public ColoredRectangle(Rectangle rectangle) {
        this.rectangle = rectangle;
}
getDataForDisplay
方法中

Rectangle r = new Rectangle(xCoor, yCoor, width, height);
ColoredRectangle cr = new ColoredRectangle(r);

您从未实际存储
R
Rectangle r = new Rectangle(xCoor, yCoor, width, height);
ColoredRectangle cr = new ColoredRectangle();
cr.rectangle = r; //<-- adding this line
addRectangle( cr );