我正在開發一個項目,我必須首先在框架上隨機創建形狀。意思是說,形狀將在隨機位置。每個創建的形狀將被存儲到數組列表中。之後,我將通過操縱x軸來重新排列形狀位置。均勻地對齊對象
假設以下情況:
5周的形狀在一個面板中創建與寬度和高度的200 對齊之前,每個形狀的位置是如下:
- 形狀A: X = 40,Y = 70
- 形狀B:X = 60,Y = 50
- 形狀C:X = 80,Y = 40
- 小號HAPE d:X = 20,Y = 60
- 形狀E:X = 60,Y = 20種
所有這些5種形狀,將隨後被存儲到形狀s。
請注意,我只是重新調整x軸的位置。 Y軸將保持不變。
實現:
現在,我們初始化新的起始位置爲0; 有1個變量;由width/numberofshapes確定的空格。 給定寬度= 200;和5個形狀創建。因此空格爲40. 空格用於確定形狀之間的間隙。
所以我的問題是,它沒有按照我希望的方式工作。 以下是我的插圖和代碼實現。
原始代碼
else if(command.equals("Align")){
int currentPosition = 0;
int spaces = 500/shapes.size();
for (Shape s : shapes) {
s.setX(currentPosition);
currentPosition = s.getX() + spaces;
}
repaint();
}
修訂碼 - 實現排序
else if(command.equals("Align")){
int currentPosition = 0;
int spaces = 500/shapes.size();
ArrayList<Shape> sortedShapes = new ArrayList<Shape>();
sortedShapes.addAll(shapes);
Collections.sort(sortedShapes, new Comparator<Shape>() {
@Override
public int compare(final Shape object1, final Shape object2) {
return object1.getX() < object2.getX() ? -1 : object1.getX() == object2.getX() ? 0 : 1;
}
});
for (Shape s : sortedShapes) {
s.setX(currentPosition);
currentPosition = s.getX() + spaces;
}
repaint();
}
圖片說明:
前:
後:
我面對當前的問題(如下所示):
前:
之後:
正如你可以看到我執行對齊代碼後,所有的形狀正在向右移動,其中一個實際上是超出邊界。這不是我想要的。
那麼,結果怎麼了?圖片看起來就像你在描述之後所期望的那樣。 –
@JensSchauder,我用圖像更新了帖子,圖片顯示了我目前存在的問題。 – MkLim
這很奇怪,因爲你將currentPosition(它是0)設置爲第一個Shape,所以至少有一個Shape應該是0 x。我建議您在更改之前在每個循環中打印currentPosition的值。 – Emd4600