2010-02-21 8 views
4

У меня есть простая Java-программа, которая позволяет пользователю рисовать прямоугольники на JPanel, а затем перемещать их, изменять их размер и удалять.Можно ли разрисовать один java.awt.Rectangle двумя разными граничными цветами?

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

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

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

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

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

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

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

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

ответ

0

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

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

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

+0

Насколько я знаю, метод setColor принадлежит классу Graphics, что означает, что я могу вызвать его, прежде чем рисовать весь прямоугольник - g.setColor (Color.RED); g.draw (activeRectangle); - но не пока я его рисую. Это дает мне совершенно красный прямоугольник, и я хочу только одну красную сторону. –

+0

Спасибо - я скорректировал Rectangle to Graphics. – richj

+0

Если это единственный способ сделать это с помощью Rectangles, то, возможно, мне лучше просто рисовать четыре отдельные строки, что позволит мне настроить цвет между ними. Я надеялся на несколько более элегантный подход, но спасибо, что помог мне продумать это :). –

0

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

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

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

+0

Удобная вещь о java.awt.Rectangle заключается в том, что относительно легко изменять размер и перемещаться, поскольку он сохраняет свои собственные координаты, ширину и высоту. Это не относится к JPanel, и в то время как вполне возможно написать расширение JPanel, которое имеет поля x, y, width и height, которое немного похоже на использование базыки, чтобы убить муху. –

Смежные вопросы