У меня есть 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, я пытаюсь создать прямоугольники с заданными координатами и шириной & height. Затем я пытаюсь сравнить их со всеми предыдущими прямоугольниками, чтобы увидеть, есть ли перекрытие. если нет перекрытия, прямоугольник будет нарисован, если будет перекрытие, координата x rec будет x = RecList.get(j).width+1
, и если это превышает ширину x, становится 0, а y равно y=y+10
. Затем я снова создаю текущий прямоугольник с новыми координатами и сравню с другими прямоугольниками в RecList
, пока я не найду нужное место для текущего прямоугольника. Я занимался этой проблемой в течение последних 5 дней, и мне действительно надоели. я был бы очень признателен за любые подсказки. и, пожалуйста, будьте терпеливы со мной. im все еще обучение программирования.Как определить координаты следующего прямоугольника на 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! im редактируя его сразу. – melar
Создайте список [Прямоугольник] (http://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html). Вычислите координаты X, Y ** один раз **. Нарисуйте Rectangles столько раз, сколько необходимо. –