Drag...

Hola,
Estoy tratando de hacer que un Panel pueda draggearse en un área de un Window.
Para ello el usuario puede, oprimiendo el botón derecho del mouse y manteniéndolo apretado mover el Panel por toda el área definida por el Contenedor Window... Ahora mis preguntas:
1) ¿Que layout en el Window podría usar para ello?
2) Que el botón derecho lo escucho con el MouseListener y veo si el evento fue producido por el botón derecho según lo que diga el objeto de la clase MouseEvent, ¿no?
3) Sobre focos: si el Panel que estoy tratando de hacer que se mueva por la Window, contiene dentro de él botones (el Panel esta todo cubierto de botones) entonces si hago click sobre un botón, ¿entonces el que obtiene el foco es el botón o es el Panel que contiene al botón?
Nada más por ahora.
Gracias.
Saludos, Walter.

1 Respuesta

Respuesta
1
1. Podrias usar el setLayout(null). Este dice a la interfaze que tu vas a poner las coordenadas donde van a estar tus componentes.
Cualquier cosa que instancees en el panel tendras que ponerle coordenadas
nameTextField = new TextField();
nameTextField.setBounds(200,135,200,3);
puedes hacer que si cambia uno cambien todos las coordenadas del panel.
public void movePanel(x,y,lengthX, lengthY){
//donde le vas a poner la posicion atus elementos.
}
2. No se que tanto convenga para tu programa que uses un Dialog que no sea restritivo, es decir un cuadro de Dialog.
Tu clase puede quedar
public class MyClass extends Dialog {
.
.
.
//tu constructor
public Matter(Dialog frame) {
super(frame,"MyClass",true);
...
estas lineas le dicen al Dialog que su propietario es un Frame y que es va a ser persistente, es decir, que bloquea cualquier otra ventana hasta que cierres esta. Tal vez a ti te conviene ponerlo asi
public Matter(Dialog frame) {
super(frame,"MyClass",false);
Disculpa por el tiempo no puedo poner más código, pero si quieres ver como funciona esta Class me escribes y espero hacer un ejemplito.
3. El panel no tiene foco así que el focus queda en el botón
Bueno espero esto te sirva.
Me escribes si quieres ver un ejemplo. Por el momento estoy un poco corto de tiempo.
Mil gracias por estos consejillos, me sirvieron bastante (mucho), pero si no es molestia te sigo llenando de preguntas, pero lo anterior esta todo entendido:
1) nameTextField.setBounds 200,135,200,3); Coloca el TextField en 200, 135 con el width y height de 200 y 3 no ??? Cuales la diferencia que hay con el setLocation ??? Y con respecto a esto tengo un gran problema...y bastante molesto:
2) Cuando hago el dragging del panel en dentro del Window queda todo bien, incluso hago cambios en el incono del mouse, y todos esos chiches, pero el único y "gran" problema es que cuando presiono uno de los botones del panel cuya función es cambiar el texto (con
botón.setText("A");) de otros botones dentro del panel, la ubicación del mismo sobre el window vuelve a su intentar inicial... y no queda en el lugar hacia donde lo había draggeado !
Llegue a la conclusión de que esto se puede deber a que cada vez que hago setText (por ejemplo) de uno de los botones del JPanel, el código de setText podría hacer un repaint del Panel y de esta forma alinear el Panel dentro del Window según el FlowLayout por default que estoy usando dentro del Window
¿Por qué sera esto? Existe Alguna solución...
Nada más por ahora.
Desde ya, Muchas Gracias.
Saludos, Walter.
Mil gracias por lo anterior, lo probé y parece que anda todo bien, por suerte, ahora tengo una cuestión con eventos:
¿Cómo podría hacer para realizar un fake de un KeyEvent, es decir el que apretando un JButton que representaría una tecla de un keyboard virtual, le pase el evento al componente que estaría escuchando a este teclado virtual?
Saludos, Walter.
1. SetBounds(x, y, largo, alto) esto explícitamente para un las dimenensiones de un objeto. El setLocation es la ubicación donde quieres que este de tu pantalla principal
Por ejemplo:
TextField text = new TextField("hola");
//Con estas dimensiones
text.setBounds(10,10,200,25);
//En este posicion del Dialog
text.setLocation(50,50);
2. No se si obtienes las nuevas coordenadas, pero si las obtienes trata de reubicar tu objeto en la intentar deseada en tu Ventana con el setLocation. Si no obtenlas con el getLocation y toma la diferencia entre la intentar anterior y la actual para que reubiques.
Pones a tu objeto un escuchador. Checa en el API de java el objeto que quieres y puedes ver métodos como addActionListener. Y la forma en como implementar el KeyEvent.
Perdona por ser muy breve pero si tengo un buen de trabajo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas