Foros del Web » Programación para mayores de 30 ;) » Java »

Problema al mover un componente en tiempo de ejecución

Estas en el tema de Problema al mover un componente en tiempo de ejecución en el foro de Java en Foros del Web. Resulta que estoy intentado mover un JLabel dentro de un JPanel de la siguiente forma: Código: ..... lbl.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) { ...
  #1 (permalink)  
Antiguo 07/12/2009, 11:18
MIRL27
Invitado
 
Mensajes: n/a
Puntos:
Problema al mover un componente en tiempo de ejecución

Resulta que estoy intentado mover un JLabel dentro de un JPanel de la siguiente forma:

Código:
.....
lbl.addMouseMotionListener(new MouseMotionListener() {
                public void mouseDragged(MouseEvent e) {
                    moviendoListener(e);
                }
                public void mouseMoved(MouseEvent e) {}
            });
.....

private void moviendoListener(MouseEvent evt) {
        JLabel lbl = (JLabel)evt.getSource();

        lbl.setLocation(evt.getX()-(lbl.getWidth()/2), evt.getY()-(lbl.getHeight()/2));
        
        System.out.println(evt.getX()+", "+evt.getY());
    }
Como veréis, añado un listener de MouseMotion para capturar el evento de arrastrar. Cuando se produce obtengo la posición del puntero relativa al componente y voy actualizando la posición del JLabel.

El caso es que lo mueve, sí, pero el JLabel "vibra" mientras lo estoy arrastrando.

Para ver qué sucedía he imprimido por consola las posiciones que obtengo del puntero y son un poco raras y, en absoluto, lineales:

133, 48
140, 80
134, 48
142, 81
134, 50
145, 83
137, 51
148, 86
141, 54
150, 87
145, 56
151, 90
148, 58
152, 91
150, 61
154, 93
151, 62
156, 95
153, 65
158, 99
155, 66
160, 100
156, 68
162, 103
158, 71
164, 104
160, 74
166, 105
160, 75
167, 107
162, 77
167, 109
165, 81
168, 111
165, 83
170, 115
167, 86
171, 118
169, 92
174, 121
170, 95
174, 124
171, 97
176, 126
171, 101
177, 129
174, 104
178, 134
175, 107
180, 136
178, 112
180, 137
181, 115
180, 139
185, 117
183, 142
186, 118
184, 144
186, 119
184, 145
186, 120
184, 146
187, 120
185, 148
188, 120
186, 150
188, 122
187, 151
190, 123
187, 152
191, 124
188, 153
191, 125
190, 154
191, 126
191, 155
192, 126
192, 157
194, 126
193, 158
195, 127


Al parecer recoge 2 tipos de posiciones o qué sé yo, de forma que necesitaría algún modo de "cribar" las que no me interesan (no siempre es una sí, una no)

Como dato curioso, en el evento mouseMoved sí que son correctas (consecutivas y lineales) las posiciones.


Si alguien me pudiera ayudar se lo agradecería enormemente.
  #2 (permalink)  
Antiguo 07/12/2009, 19:32
Avatar de zaccarelliasbun  
Fecha de Ingreso: mayo-2009
Ubicación: Bolivia
Mensajes: 70
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema al mover un componente en tiempo de ejecución

usa setBounds, pero tu panel principal tiene que ser setLayout(null);

JLabel lbl = (JLabel)evt.getSource();
lbl.setBounds(x, y, width, heigth);
  #3 (permalink)  
Antiguo 07/12/2009, 20:40
MIRL27
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema al mover un componente en tiempo de ejecución

Efectivamente, el panel por donde muevo el componente tiene Layout null... y setBounds no es más que una ampliación de setLocation (probado inicialmente con setBounds y cambiado a setLocation después con el mismo resultado)

Como digo, no es problema de que no se mueva: sí se mueve pero mientras arrastro hay una "vibración" o una "dualidad" de posiciones no concordantes.

El problema viene por los valores recibidos de los métodos evt.getX() y evt.getY() donde evt es un objeto de tipo MouseEvent....
  #4 (permalink)  
Antiguo 07/12/2009, 21:21
Avatar de zaccarelliasbun  
Fecha de Ingreso: mayo-2009
Ubicación: Bolivia
Mensajes: 70
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema al mover un componente en tiempo de ejecución

yo tuve el mismo problema, para solucionar esto, lo puse en un BufferedImage y asi cuando lo arrastraba con el mouseDragged lo dibujaba cada vez que sea necesario, asi la imagen no se ralentiza al momento de moverla, espero poder ayudarte, si no da lo que te dije, hazme saber para que te pueda ayudar de otra manera.

Saludos.
  #5 (permalink)  
Antiguo 07/12/2009, 21:32
MIRL27
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema al mover un componente en tiempo de ejecución

Gracias, probaré mañana en cuanto me levante, que aquí ya son las 4:30... :S

El problema que comento he leído por otro sitio que sucedía por un almacenamiento en doble buffer o algo así de la posición relativa del puntero, lo que no se explicaba era lo que se almacenaba exactamente pero gracias de nuevo y cuando compruebe si sale con el BufferedImage lo postearé ^^
  #6 (permalink)  
Antiguo 26/12/2009, 22:22
 
Fecha de Ingreso: diciembre-2009
Mensajes: 5
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al mover un componente en tiempo de ejecución

a mi me pasa lo mismo. si lo solucionaste ojala me digas como hacerlo.
  #7 (permalink)  
Antiguo 19/12/2011, 11:34
Avatar de mcrpxndx  
Fecha de Ingreso: diciembre-2011
Ubicación: México
Mensajes: 2
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Problema al mover un componente en tiempo de ejecución

Resulta que estoy intentado mover un JLabel dentro de un JPanel de la siguiente forma:

Código:
.....
lbl.addMouseMotionListener(new MouseMotionListener() {
                public void mouseDragged(MouseEvent e) {
                    moviendoListener(e);
                }
                public void mouseMoved(MouseEvent e) {}
            });
.....

private void moviendoListener(MouseEvent evt) {
        JLabel lbl = (JLabel)evt.getSource();

        lbl.setLocation(evt.getX()-(lbl.getWidth()/2), evt.getY()-(lbl.getHeight()/2));
        
        System.out.println(evt.getX()+", "+evt.getY());
    }
acabo de hacer algo similar, mira

jLabel1.setLocation(
jLabel1.getX() + e.getX() - (jLabel1.getWidth() / 2),
jLabel1.getY() + e.getY() - (jLabel1.getHeight() / 2)
);


espero te sriva.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:55.