У меня есть приложение Java, которое рисует рисунок.Я хочу дать пользователю возможность пометить область мышью (например, чтобы увеличить ее).Для этого я использую класс MouseMotionListener, и когда мышь (щелкают и затем) перемещают, я сохраняю местоположение выбранного в данный момент (это не окончательно, поскольку пользователь не отпустил мышь) прямоугольника и использую repaint()
функция.Я хочу отобразить этот прямоугольник поверх исходного чертежа, делая его похожим на инструмент «Выделение» в MSPaint.
Проблема в том, что когда я вызываю функцию repaint()
, вызывается метод paintComponent (Graphics page)
, в которомЯ использую метод super.paintComponent(page)
, который стирает мой рисунок.Однако, если я не использую этот метод, когда я знаю, что пользователь выбирает прямоугольник, я получаю, что все выбранные прямоугольники «упакованы» один над другим, и это нежелательный результат - я хочу отобразить текущий выбранныйтолько прямоугольник.
Я подумал, что смогу сохранить копию графической страницы чертежа и каким-то образом восстановить ее каждый раз, когда пользователь перемещает мышь, но я не смог найти документацию для полезных методов.
Большое спасибо,
Рон.
Редактировать: Вот соответствующие части моего кода:
public class DrawingPanel extends JPanel
{
public FractalPanel()
{
addMouseListener (new MyListener());
addMouseMotionListener (new MyListener());
setBackground (Color.black);
setPreferredSize (new Dimension(200,200));
setFocusable(true);
}
public void paintComponent (Graphics page)
{
super.paintComponent(page);
//that's where the drawing takes place: page.setColor(Color.red), page.drawOval(..) etc
}
private class MyListener implements MouseListener, MouseMotionListener
{
...
public void mouseDragged (MouseEvent event)
{
//saving the location of the rectangle
isHoldingRectangle = true;
repaint();
}
}
}