Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绘制程序未使用并行数组正确存储大小和颜色_Java_Arrays_Swing_Arraylist_Paintcomponent - Fatal编程技术网

Java 绘制程序未使用并行数组正确存储大小和颜色

Java 绘制程序未使用并行数组正确存储大小和颜色,java,arrays,swing,arraylist,paintcomponent,Java,Arrays,Swing,Arraylist,Paintcomponent,这是一个简单的绘画风格程序,使用数组和ArrayList,使用JFrame、paintComponent和各种鼠标侦听器保存屏幕上绘制的不同点的坐标、大小和颜色 我最近修复了一个问题,它会抛出一个ArrayOutOfBounds错误并指向第34行,而颜色数组超过了它的10000限制。但是,我需要程序运行,并且每个点的大小和颜色彼此平行,因此每次程序重新绘制点时,每个点都保留自己的大小和颜色变量。谢谢你的意见 import java.util.ArrayList; import j

这是一个简单的绘画风格程序,使用数组和ArrayList,使用JFrame、paintComponent和各种鼠标侦听器保存屏幕上绘制的不同点的坐标、大小和颜色

我最近修复了一个问题,它会抛出一个ArrayOutOfBounds错误并指向第34行,而颜色数组超过了它的10000限制。但是,我需要程序运行,并且每个点的大小和颜色彼此平行,因此每次程序重新绘制点时,每个点都保留自己的大小和颜色变量。谢谢你的意见

    import java.util.ArrayList;
    import javax.swing.JPanel;
    import java.awt.*;
    import java.awt.event.*;

    public class Proj1Panel extends JPanel{
        public int SIZE = 5, c = 0, s = 0;

        private ArrayList<Point> pointList;
        public int[] sizes;
        public Color[] colors;

        public Proj1Panel(){
            pointList = new ArrayList<Point>();
            sizes = new int[10000];
            colors = new Color[10000];

            addMouseListener (new Proj1Listener());
            addMouseMotionListener (new Proj1Listener());
            addMouseWheelListener (new Proj1Listener());

            setBackground(Color.black);
            setPreferredSize(new Dimension(300, 200));
        }
        public void paintComponent(Graphics page){
            super.paintComponent(page);
            for(Point spot : pointList){
                page.setColor(colors[c]);
                page.fillRect(spot.x-sizes[pointList.size()], spot.y-sizes[pointList.size()], sizes[pointList.size()]*2, sizes[pointList.size()]*2);
                c = 0;
            }
            repaint();
            page.setColor(Color.RED);
            page.fillRect(5, 40, 30, 30);
            page.setColor(Color.BLUE);
            page.fillRect(5, 75, 30, 30);
            page.setColor(Color.GREEN);
            page.fillRect(5, 110, 30, 30);
            page.setColor(Color.WHITE);
            page.fillRect(5, 145, 30, 30);
            page.setColor(Color.WHITE);
            page.drawString("Count: " + pointList.size() + "/10000", 5, 15);
            page.drawString("Size: " + SIZE, 5, 30);
        }
        private class Proj1Listener implements MouseListener, MouseMotionListener, MouseWheelListener{
            public void mousePressed(MouseEvent event){
                pointList.add(event.getPoint());
                sizes[pointList.size()] = SIZE;
                repaint();
            }
            public void mouseDragged(MouseEvent event){
                pointList.add(event.getPoint());
                sizes[pointList.size()] = SIZE;
                repaint();
            }
            public void mouseWheelMoved(MouseWheelEvent event){
                SIZE -= event.getWheelRotation();
                repaint();
            }
            public void mouseClicked(MouseEvent event){
                int x1 = event.getX();
                int y1 = event.getY();
                if(x1 > 5 && x1 < 35 && y1 > 40 && y1 < 70){
                    colors[c] = Color.RED;
                }
                if(x1 > 5 && x1 < 35 && y1 > 75 && y1 < 105){
                    colors[c] = Color.BLUE;
                }
                if(x1 > 5 && x1 < 35 && y1 > 110 && y1 < 140){
                    colors[c] = Color.GREEN;
                }
                if(x1 > 5 && x1 < 35 && y1 > 145 && y1 < 175){
                    colors[c] = Color.WHITE;
                }
            }
            public void mouseReleased(MouseEvent event){}
            public void mouseEntered(MouseEvent event){}
            public void mouseExited(MouseEvent event){}
            public void mouseMoved(MouseEvent event){}
        }
    }
import java.util.ArrayList;
导入javax.swing.JPanel;
导入java.awt.*;
导入java.awt.event.*;
公共类Proj1Panel扩展JPanel{
公共整数大小=5,c=0,s=0;
私有ArrayList点列表;
公共int[]大小;
公共颜色[]颜色;
公共项目小组(){
pointList=新的ArrayList();
尺寸=新整数[10000];
颜色=新颜色[10000];
addMouseListener(新Proj1Listener());
addMouseMotionListener(新的Proj1Listener());
addMouseWheelListener(新的Proj1Listener());
挫折背景(颜色:黑色);
setPreferredSize(新尺寸(300200));
}
公共组件(图形页){
super.paintComponent(第页);
对于(点:点列表){
页面设置颜色(颜色[c]);
page.fillRect(spot.x-size[pointList.size()],spot.y-size[pointList.size()],size[pointList.size()]*2,size[pointList.size()]*2);
c=0;
}
重新油漆();
页面设置颜色(颜色为红色);
第5页,第40页,第30页,第30页;
page.setColor(Color.BLUE);
第5页,第75页,第30页,第30页;
page.setColor(Color.GREEN);
第5页,第110页,第30页,第30页;
page.setColor(Color.WHITE);
第5页,第145页,第30页,第30页;
page.setColor(Color.WHITE);
page.drawString(“计数:“+pointList.size()+”/10000”,5,15);
第页。抽绳(“尺寸:”+尺寸,5,30);
}
私有类Proj1Listener实现MouseListener、MouseMotionListener、MouseWheelListener{
公共无效鼠标按下(鼠标事件){
添加(event.getPoint());
大小[pointList.size()]=大小;
重新油漆();
}
公共无效鼠标标记(鼠标事件){
添加(event.getPoint());
大小[pointList.size()]=大小;
重新油漆();
}
公共作废mouseWheelMoved(MouseWheelEvent事件){
SIZE-=event.getWheelRotation();
重新油漆();
}
公共void mouseClicked(MouseEvent事件){
int x1=event.getX();
inty1=event.getY();
如果(x1>5&&x1<35&&y1>40&&y1<70){
颜色[c]=颜色为红色;
}
如果(x1>5&&x1<35&&y1>75&&y1<105){
颜色[c]=颜色为蓝色;
}
如果(x1>5&&x1<35&&y1>110&&y1<140){
颜色[c]=颜色为绿色;
}
如果(x1>5&&x1<35&&y1>145&&y1<175){
颜色[c]=颜色为白色;
}
}
公共无效MouseEvent事件{}
public void mouseenterned(MouseEvent事件){}
public void mouseExited(MouseEvent事件){}
public void mouseMoved(MouseEvent事件){}
}
}
编辑:
我能够解决我的程序出现的问题。我必须在绘制循环之前重置几个变量。这是工作程序

import java.util.ArrayList;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;

public class Proj1Panel extends JPanel{
    public int SIZE = 5, c = 0, s = 0;
    private ArrayList<Point> pointList;
    private int[] sizes;
    private Color[] colors;
    public String colorIs = "WHITE";

    public Proj1Panel(){
        pointList = new ArrayList<Point>();
        sizes = new int[1000000];
        colors = new Color[1000000];

        addMouseListener (new Proj1Listener());
        addMouseMotionListener (new Proj1Listener());
        addMouseWheelListener (new Proj1Listener());

        setBackground(Color.black);
        setPreferredSize(new Dimension(300, 200));
    }
    public void paintComponent(Graphics page){
        super.paintComponent(page);
        page.setColor(Color.WHITE);
        c = 0;
        s = 0;
        for(Point spot : pointList){
            page.setColor(colors[c]);
            page.fillRect(spot.x-sizes[s], spot.y-sizes[s], sizes[s]*2, sizes[s]*2);
            c++;
            s++;
        }
        repaint();
        page.setColor(Color.BLACK);
        page.fillRect(0, 0, 150, 35);
        page.setColor(Color.BLACK);
        page.fillRect(0, 35, 40, 180);
        page.setColor(Color.RED);
        page.fillRect(5, 40, 30, 30);
        page.setColor(Color.BLUE);
        page.fillRect(5, 75, 30, 30);
        page.setColor(Color.GREEN);
        page.fillRect(5, 110, 30, 30);
        page.setColor(Color.WHITE);
        page.fillRect(5, 145, 30, 30);
        page.setColor(Color.WHITE);
        page.fillRect(5, 180, 30, 30);
        page.setColor(Color.BLACK);
        page.fillRect(7, 182, 26, 26);
        page.setColor(Color.WHITE);
        page.drawString("Count: " + pointList.size() + "/1000000", 5, 15);
        page.drawString("Size: " + SIZE, 5, 30);
        page.drawString("Color: ", 65, 30);
        page.drawString(colorIs, 100, 30);
    }
    private class Proj1Listener implements MouseListener, MouseMotionListener, MouseWheelListener{
        public void mousePressed(MouseEvent event){
            pointList.add(event.getPoint());
            sizes[pointList.size()] = SIZE;
            repaint();
        }
        public void mouseDragged(MouseEvent event){
            pointList.add(event.getPoint());
            sizes[pointList.size()] = SIZE;
            repaint();
        }
        public void mouseWheelMoved(MouseWheelEvent event){
            SIZE -= event.getWheelRotation();
            repaint();
        }
        public void mouseClicked(MouseEvent event){
            int x1 = event.getX();
            int y1 = event.getY();
            if(x1 > 5 && x1 < 35 && y1 > 40 && y1 < 70){
                colors[c] = Color.RED;
                colorIs = "RED";
            }
            if(x1 > 5 && x1 < 35 && y1 > 75 && y1 < 105){
                colors[c] = Color.BLUE;
                colorIs = "BLUE";
            }
            if(x1 > 5 && x1 < 35 && y1 > 110 && y1 < 140){
                colors[c] = Color.GREEN;
                colorIs = "GREEN";
            }
            if(x1 > 5 && x1 < 35 && y1 > 145 && y1 < 175){
                colors[c] = Color.WHITE;
                colorIs = "WHITE";
            }
            if(x1 > 5 && x1 < 35 && y1 > 180 && y1 < 210){
                colors[c] = Color.black;
                colorIs = "BLACK";
            }
        }
        public void mouseReleased(MouseEvent event){}
        public void mouseEntered(MouseEvent event){}
        public void mouseExited(MouseEvent event){}
        public void mouseMoved(MouseEvent event){}
    }
}
import java.util.ArrayList;
导入javax.swing.JPanel;
导入java.awt.*;
导入java.awt.event.*;
公共类Proj1Panel扩展JPanel{
公共整数大小=5,c=0,s=0;
私有ArrayList点列表;
私有int[]大小;
私人色彩[]颜色;
公共字符串colorIs=“白色”;
公共项目小组(){
pointList=新的ArrayList();
大小=新整数[1000000];
颜色=新颜色[1000000];
addMouseListener(新Proj1Listener());
addMouseMotionListener(新的Proj1Listener());
addMouseWheelListener(新的Proj1Listener());
挫折背景(颜色:黑色);
setPreferredSize(新尺寸(300200));
}
公共组件(图形页){
super.paintComponent(第页);
page.setColor(Color.WHITE);
c=0;
s=0;
对于(点:点列表){
页面设置颜色(颜色[c]);
page.fillRect(点x尺寸[s],点y尺寸[s],尺寸[s]*2,尺寸[s]*2);
C++;
s++;
}
重新油漆();
page.setColor(Color.BLACK);
page.fillRect(0,0,150,35);
page.setColor(Color.BLACK);
第3页fillRect(0,35,40,180);
页面设置颜色(颜色为红色);
第5页,第40页,第30页,第30页;
page.setColor(Color.BLUE);
第5页,第75页,第30页,第30页;
page.setColor(Color.GREEN);
第5页,第110页,第30页,第30页;
page.setColor(Color.WHITE);
第5页,第145页,第30页,第30页;
page.setColor(Color.WHITE);
第5页,第180页,第30页,第30页;
page.setColor(Color.BLACK);
第7页,第182页,第26页,第26页;
page.setColor(Color.WHITE);
page.drawString(“计数:“+pointList.size()+”/1000000”,5,15);
第页。抽绳(“尺寸:”+尺寸,5,30);
第二页:抽绳(颜色:,65,30);
页码.抽绳(彩色,100,30);
}
私有类Proj1Listener实现MouseListener、MouseMotionListener、MouseWheelLi
spot.x-sizes[pointList.size()]
public void paintComponent(Graphics page) {
  super.paintComponent(page);
  c = 0;  // each time paintComponent starts, c should be 0
  for (Point spot : pointList) {
     page.setColor(colors[c]);
     page.fillRect(spot.x - sizes[pointList.size()], spot.y
           - sizes[pointList.size()], sizes[pointList.size()] * 2,
           sizes[pointList.size()] * 2);
     c++;  // but within the for loop, it should increment.
  }
  // .... etc