Reutilizando getX () getY () en un controlador de evento de clic del mouse

Esta es una pregunta larga. Intenté hacerlo más conciso, pero creo que necesitas toda la información para ayudar.

Aquí hay un resumen: estoy tratando de capturar clics consecutivos como puntos finales. Dibujaré objetos line2D entre estos puntos. Tengo un oyente que envía valores xey de eventos de clic a una clase auxiliar. Nunca tendré más de dos puntos, por lo que la clase auxiliar solo tiene miembros firstPoint y secondPoint. Recibo los clics y envío las coordenadas a la clase auxiliar mediante evt.getX () y evt.getY (). El ayudante crea los puntos, pero firstPoint termina con los mismos códigos que secondPoint. Mi detalle sobre lo que está sucediendo se puede encontrar debajo de los bloques de código.

Aquí está el código en mi controlador de clic del mouse:

public class Dashboard extends javax.swing.JFrame {

    public static ClickMaster myClicks = new ClickMaster();
    public static boolean drawing = false;
    private MyPoint firstPoint = new MyPoint();
    private MyPoint secondPoint = new MyPoint();

. . .

private void MyDrawingPanelMouseClicked(java.awt.event.MouseEvent evt) {
        if (firstPoint.getPointType().equals(MyPoint.PointType.NULL)) {
            drawing = !drawing;
            firstPoint = myClicks.parseClick(evt.getX(), evt.getY(), drawing);
        } else if (drawing){
            drawing = !drawing;
            secondPoint = myClicks.parseClick(evt.getX(), evt.getY(), drawing);
            myClicks.parsePoints(firstPoint, secondPoint);
        }
}

Aquí está la clase auxiliar que devuelve puntos:

public class ClickMaster {

    MyPoint anyPoint = new MyPoint();

    public ClickMaster() {
        anyPoint.setPointType(MyPoint.PointType.NULL);
    }

    public MyPoint parseClick(double x, double y, boolean firstClick) {
            if (firstClick) {
                anyPoint.setPointType(MyPoint.PointType.ANCHOR);
            } else {
                anyPoint.setPointType(MyPoint.PointType.END);
            }

        anyPoint.setX(x);
        anyPoint.setY(y);

        return anyPoint;
    }

Y aquí está mi implementación de objetos Point2D, en caso de que sea relevante:

public class MyPoint extends Point2D {

    public enum PointType {

        ANCHOR, END, SOLO, NULL
    };

    double x;
    double y;
    PointType pointType;

    public MyPoint(PointType pType, double x, double y) {

        this.x = x;
        this.y = y;
        this.pointType = pType;
    }

    public MyPoint() {
        this.x = 0.0;
        this.y = 0.0;
        this.pointType = PointType.NULL;
    }

+ getters / setters estándar como era de esperar.

la depuración muestra que

firstPoint = myClicks.parseClick(firstX, firstY, drawing);

da como resultado un punto con los valores x e y del evento del mouse. Esto es de esperarse.

Igualmente,

secondPoint = myClicks.parseClick(evt.getX(), evt.getY(), drawing);

Resultados en un punto con los valores x e y del segundo clic. También esperado.

Sin embargo, cuando llamo

myClicks.parsePoints(firstPoint, secondPoint);

Veo que firstPoint y secondPoint tienen los mismos valores x, y.

No estoy seguro, pero creo que se debe a que firstPoint y secondPoint obtienen sus valores x e y del mouse evt. Creo que necesito poner valores de tipo double para x's e y's en firstPoint y secondPoint en lugar de una referencia al valor doble devuelto por el evento del mouse por getX () y getY ().

Simplemente no sé cómo hacer que suceda.

Además, si hay una forma mucho mejor de capturar clics consecutivos y traducirlos a puntos finales para formas, agradecería los comentarios.

Respuesta 1

Estoy usando un Servlet y JSP para mostrar una página web. Pero cada vez que uso la moneda Euro me sale un signo de interrogación (?). Cuando imprimo en lgs está bien, pero cuando se procesa en HTML no ...

Estoy escribiendo una aplicación simple para que un teléfono Android se comunique con una PC a través de una conexión de socket. El teléfono puede escribir o recibir un mensaje en cualquier momento, y la computadora también. Los ...

Tengo un programa Java donde se declaran algunas declaraciones SQL como en este método: public ObservableList <TSTTimeZoneConversion> retrieveTimeZoneConversions () arroja TSTDBException {...

Me gustaría invocar una operación de pegado con mi aplicación Java. ¿Es esto posible sin usar Robot? Por ejemplo, la aplicación invocaría una operación de pegar de vez en cuando, así que cuando estoy ...