我有一个对象的arraylist RecArray
每个对象包含两个int值,一个用于矩形的宽度和高度。每个矩形的高度和宽度都是十的倍数。必须按照从左到右和从上到下RecArray
的给定顺序将矩形传递到表面。我的问题是我找不到下一个矩形的x,y坐标。我试图做的是,从坐标(0,0)开始,我生成第一个矩形,将它添加到arraylist RecList
。然后我设置x和y坐标。 x变成x = x+RecArray.get(0).getLength1() + 1
。如果x大于jpanel表面的宽度,则它变为0,并且y变成y = y + 10
。从RecArray中的第二个对象开始,我尝试生成具有给定坐标和高度的宽度的矩形。然后我尝试将它们与以前的所有矩形进行比较,看看是否有重叠。如果没有重叠,则绘制矩形,如果有重叠,则rec的x坐标变为x = RecList.get(j).width+1
,并且如果超出宽度x变为0且y为y=y+10
。然后我使用新坐标重新生成当前矩形,并再次与RecList
中的其他矩形进行比较,直到找到当前矩形的正确位置为止。过去5天中,该问题一直处理该问题,现在我真的很厌倦了。我会非常感激任何tipps。请耐心等待。我还在学习编程。如何确定JPanel上的下一个矩形的坐标
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
Rectangle rec = new Rectangle(x, y, RecArray.get(0).getWidth(),
RecArray.get(0).getHeight());
RecList.add(rec);
recPaint(g2,RecArray.get(0));
x = x + RecArray.get(0).getWidth() + 1;
int i;
for (i = 1; i < RecArray.size(); i++) {
if (x >= this.getArea().getWidth()) {
x = 0;
y = y + 10;
}
Rectangle rec1 = new Rectangle(x, y, RecArray.get(i)
.getWidth(), RecArray.get(i).getheight());
for (int j= 0; j < RecList.size(); j++) {
if (!recIntersect(rec1, RecList.get(j))) {
RecList.add(rec1);
recPaint(g2,RecArray.get(i));
break;
}
else {
x = RecList.get(j).width;
if (x >= this.getFlaeche().getLength1()) {
x = 0;
y = y + 10;
}
rec1 = new Rectangle(x, y,RecArray.get(i). .getWidth(),
RecArray.get(i).getHeight());
}
x = x + RecArray.get(i).getWidth();
}
//With this method using the given rec parameter a rectangle will be drawn on the g2 and filled in blue colour
private void recPaint (Graphics2D g2, RecType rec){
g2.setColor(Color.BLUE);
g2.fillRect(x, y, rec.getWidth(),
rec.getLength2());
g2.setColor(Color.BLACK);
g2.drawRect(x, y, rec.getHeight(),
rec.getLength2());
}
// returns true, if two rectangles overlap
private boolean recIntersect(Rectangle rec1, Rectangle rec2) {
if(rec1.intersects(rec2)){
return true;
}
return false;
}
编辑:显然,我还没有明确指出我的问题是什么。我的问题是,我生成矩形的(x,y)坐标的方式显然是错误的。我的算法的工作方式不会得到我想要的结果。我想我的矩形被整齐地放置在彼此旁边/上方/下方,没有重叠,事实并非如此。
你已经详细描述了你目前的算法,但是我仍然确定你的问题到底是什么。另外,请尝试用比喻,可以理解的方式来描述你想要达到的目标(比如“我想用我的矩形填充我的JPanel而没有重叠”或者什么,因为我不太了解你的目标)。 –
Thx!即时编辑它马上。 – melar
创建[Rectangle]的列表(http://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html)。计算一次**的X,Y坐标**。根据需要多次绘制矩形。 –