MouseEvent no está registrando una versión cuando suelto el botón del mouse

public void mousePressed(MouseEvent e) {
    //Invoked when a mouse button has been pressed on a component.
    if (e.getButton() == MouseEvent.BUTTON1) {
        isDown = true;
        System.out.println("isDown is now true");
    }
    if (e.getButton() == MouseEvent.BUTTON3) {
        isDown2 = true;
        System.out.println("isDown2 is now true");
    }
    do {
        Point location = MouseInfo.getPointerInfo().getLocation(); 
        int x = location.x - (drawingPanel.getLocationOnScreen()).x;
        int y = location.y - (drawingPanel.getLocationOnScreen()).y;
        drawingPanel.paint(drawingPanel.getGraphics(), (x - (x % 20) - 1), (y - (y % 20) - 1), 19, 19);
    } while (isDown);
    System.out.println("Mouse has been pressed down.");
}

public void mouseReleased(MouseEvent e) {
    //Invoked when a mouse button has been released on a component.
    if (e.getButton() == MouseEvent.BUTTON1) {
        isDown = false;
        System.out.println("isDown is now false");
    }
    if (e.getButton() == MouseEvent.BUTTON3) {
        isDown2 = false;
        System.out.println("isDown2 is now false");
    }
    System.out.println("Mouse has been released.");
}

Esto es lo que tengo hasta ahora. Mis intenciones originales eran diseñar el código para que el booleanoisDown se establecerá en verdadero cuando se presionó el mouse hacia abajo y luego tendría elwhile bucle ejecutar mientrasisDown es verdad. Si se suelta el botón del ratón, estableceríaisDown a falso para terminar elwhile lazo.

¿Qué estoy haciendo aquí? ¿No es posible que dos métodos MouseEvent se ejecuten al mismo tiempo? El cambio en elisDown la variable booleana no se está registrando y tengo un bucle infinito en mis manos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta