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 );