Прежде всего, здесь соответствующий код:MouseMotionListener показывает (х, у) смещение
canvas = new CanvasPanel();
canvas.setBackground(Color.white);
canvas.addMouseListener(new PointListener());
canvas.addMouseMotionListener(new PointListener());
JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, canvas);
class CanvasPanel extends JPanel
{
public void paintComponent(Graphics page)
{
super.paintComponent(page);
if (mouseDragged == true)
{
page.drawRect(x1, y1, x3, y3);
canvas.repaint();
}
}
}
class PointListener implements MouseListener, MouseMotionListener
{
public void mousePressed (MouseEvent event)
{
mouseDragged = true;
x1 = event.getX();
y1 = event.getY();
}
public void mouseReleased (MouseEvent event)
{
// some code
}
public void mouseDragged(MouseEvent event)
{
x3 = event.getX();
y3 = event.getY();
canvas.repaint();
}
Так что этот код делает, когда я нажимаю на компоненте холста, он будет рисовать контур прямоугольник и размер меняются при перетаскивании мыши
Однако, когда я нажимаю и начинаю перетаскивать мышь, в нижнем правом углу прямоугольника есть смещение. Кажется, что я перехожу к большему размеру, а затем перетаскиваю мышь. Интересно, что чем ближе к верхнему левому углу компонента холста я нажимаю, тем ближе размер прямоугольника к прямоугольнику, который я рисую мышью.
Как это исправить?
Oh duh: /. Спасибо за это, я знал, что это было что-то глупое. – ASchmalzWorld
Вероятно, это не очевидно из ответа, но 'drawRect' не принимает отрицательные значения width/height;) – MadProgrammer