2015-09-01 1 views
0

У меня есть пользовательский интерфейс Swing, для которого пользователь должен иметь возможность щелкнуть и перетащить в JPanel (поверх некоторого фонового изображения), чтобы иметь возможность определять данный регион. Проблема в том, что координаты и представление прямоугольника на экране необходимо будет привязать к вне 4 пикселя области, которую они нарисовали. Фоновое изображение будет увеличено таким образом, что для человека не имеет смысла устанавливать границу между этими точками, и я бы хотел, чтобы пользовательский интерфейс отражал это.Рисование прямоугольника в JPanel, привязанного к ближайшим пикселям x

Чтобы привести пример, если я должен был щелкнуть и нарисовать прямоугольник от (103, 105) до (203,205), прямоугольник должен появиться, чтобы покрыть область от (100,104) до (204,208) - то есть наименьшее возможное прямоугольник, так что все координаты углов должны быть кратными 4 пикселям и что область, на которую была нажата кнопка, полностью закрыта.

Как бы я это сделал?

+0

* "(103, 105) к (203205), прямоугольник должен появиться, чтобы покрыть площадь от (100,104) до (204,208)" * Из того, что я понимаю, ни одно из этих значений не соответствует границе «4 пикселя». –

ответ

2

Ну, я полагаю, у вас есть два объекта Point (начало, конец), поэтому вы можете создать небольшой метод для настройки значений.

Вот простой пример, чтобы получить ваши начал:

import java.awt.*; 
public class Main 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Point start = new Point(103, 105); 
     Point end = new Point(203, 205); 

     adjust(start, 4, true); 
     adjust(end, 4, false); 

     System.out.println(start); 
     System.out.println(end); 
    } 

    public static void adjust(Point p, int snap, boolean snapLower) 
    { 
     int modX = p.x % snap; 
     p.x = snapLower ? p.x - modX : p.x + snap - modX; 

     int modY = p.y % snap; 
     p.y = snapLower ? p.y - modY : p.y + snap - modY; 
    } 
}