Можно ли нарисовать один java.awt.Rectangle двумя разными цветами границ? - PullRequest
4 голосов
/ 21 февраля 2010

У меня есть простая Java-программа, которая позволяет пользователю рисовать прямоугольники на JPanel, а затем перемещать их, изменять их размер и удалять их.

Панель рисования реализует MouseListener и MouseMotionListener. Когда событие инициируется, оно проверяет, какой пункт меню выбран (новый прямоугольник, перемещается, изменяет размер или удаляет), и реагирует соответствующим образом.

Когда выбрана опция «изменить размер», методы слушателя делают следующее:

  • MouseMoved вызывает boolean detectBoundary (). Когда это возвращает true, прямоугольник, которому принадлежит граница, устанавливается как активный прямоугольник.

  • MouseDragged вызывает void moveBoundary, который перемещает обнаруженную границу в направлении жеста перетаскивания.

Теперь то, что я ищу, это способ сделать границу, которая будет сдвинута, выделенной. Я могу перекрасить весь прямоугольник в более толстые линии или в другой цвет, что я делаю сейчас, когда устанавливаю данный прямоугольник в качестве активного, но это не то, что я хочу. Я хотел бы перекрасить только одну границу.

Метод setBorder, который может обрабатывать метод createMatteBorder BorderFactory, может показаться идеальным для этих целей, но я не смог найти способ заставить это работать.

У кого-нибудь есть идеи, как мне это сделать?

Все предложения будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2010

Класс BorderFactory обычно используется для создания границ для компонентов Swing, поэтому я не уверен, что это работает и в вашем случае. Вы пытались создать новую панель с рамкой

JPanel panel = new JPanel(); 
Border mb = (BorderFactory.createMatteBorder (0, 5, 0, 0, Color.red); 
panel.add(mb);

, а затем добавьте прямоугольник на панель и добавьте его на существующую панель, где вы на самом деле рисуете?

0 голосов
/ 21 февраля 2010

Не могли бы вы вызвать метод setColor (Color color) на java.awt.Graphics?

Звучит так, будто вы просите что-то более сложное, но я не совсем уверен, что именно. Если вам нужны два разных цвета границ на одном и том же прямоугольнике, я думаю, вам придется использовать два прямоугольных объекта для этого. Верхний прямоугольник будет иметь прозрачную заливку. Два прямоугольника должны были бы двигаться вместе, и второй прямоугольник должен был бы быть удален из вида, когда движение будет завершено.

Я не уверен, возможно ли изменить цвет только одного края простого прямоугольника, но вы можете построить более сложную фигуру из нескольких фигур, или вы можете нарисовать свой прямоугольник в BufferedImage и нарисовать линия поверх другого цвета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...