我有一個對象的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座標**。根據需要多次繪製矩形。 –