У меня есть заполненный круг, нарисованный на холсте, и я пытаюсь заставить его двигаться по методу щелчка и перетаскивания с помощью мыши. Мне удалось проверить, находится ли указатель мыши в пределах круга, и когда я перетаскиваю мышь, переменная, сохраняющая положение круга, обновляется по мере необходимости, но сам круг не перерисовывается, поскольку я перетаскиваю (больше всего это будет мерцать). Моя проблема в конце, где я переопределяю mouseDragged()
.Позиция формы не перерисовывается при перетаскивании мышью
getCanvas().addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent event)
{
super.mouseClicked(event);
Point mousePosition = event.getPoint();
if (_circle.getShape1().contains(mousePosition))
Main.debugLabel.setText("Clicked");
}
@Override
public void mouseReleased(MouseEvent event)
{
super.mouseReleased(event);
_circle.isDraggable = false;
Main.debugLabel.setText("Released");
}
@Override
public void mousePressed(MouseEvent event)
{
super.mousePressed(event);
int button = event.getModifiers();
if (button == InputEvent.BUTTON1_MASK)
{
_circle.isDraggable = true;
Main.debugLabel.setText("Pressed");
}
}
});
getCanvas().addMouseMotionListener(new MouseAdapter()
{
@Override
public void mouseDragged(MouseEvent event)
{
super.mouseDragged(event);
Point mousePosition = event.getPoint();
if (_circle.isDraggable)
{
_circle.posX = mousePosition.x;
_circle.posY = mousePosition.y;
Main.debugLabel.setText("Dragging " + _circle.posX);
getCanvas().repaint();
}
}
@Override
public void mouseMoved(MouseEvent event)
{
super.mouseMoved(event);
Point mousePosition = event.getPoint();
if (_circle.getShape1().contains(mousePosition))
Main.debugLabel.setText("Within Bounds");
else if (!_circle.getShape1().contains(mousePosition) && !_circle.isDraggable)
Main.debugLabel.setText("Out of Bounds");
}
});
@AndrewThompson SO не требует SSCCE (вероятно, потому, что проекты других пользователей различаются по размеру и сложности, чтобы реплицировать проблему для других, чтобы проверить себя). – SpicyWeenie
@SpicyWeenie, пока проблема не решена, вы не знаете, какая часть кода вызывает проблему. Если вы не хотите показать, что вы приложили усилия для решения своей проблемы, создав SSCCE, большинство из нас не хотят терять время, угадывая, что вы можете делать неправильно. – camickr
@camickr Я понимаю, что вы говорите, но я также не отправляю всю свою программу по одной проблеме. Также совершенно несправедливо предполагать, что я не исследовал себя. Наконец, SSCCE не является обязательным требованием, и если это проблема, которая меня насторожила, я отправляю только соответствующий код, где произошла ошибка, и любой другой соответствующий код, который показывает, что я попытался предпринять некоторые шаги для достижения. Если вам нужно угадать, то извините, но вопрос может быть не для вас, потому что часть программирования делает образованные предположения, будь то через концептуальную теорию или программно. – SpicyWeenie