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

Duda con los puntos

Estas en el tema de Duda con los puntos en el foro de Java en Foros del Web. Hola,estoy diseñando un applet,que hacen falta unos puntos,pero no se como dibujarlos.Anteriormente puse un post en este mismo foro,pero nome quedo claro.El codigo que tengo ...
  #1 (permalink)  
Antiguo 06/03/2007, 08:36
 
Fecha de Ingreso: diciembre-2006
Mensajes: 24
Antigüedad: 17 años, 4 meses
Puntos: 0
Duda con los puntos

Hola,estoy diseñando un applet,que hacen falta unos puntos,pero no se como dibujarlos.Anteriormente puse un post en este mismo foro,pero nome quedo claro.El codigo que tengo es el siguiente,y quisiera saber porque no me crea nada.Soy nuevo en esto,

private void BEjemploMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
x=p.getSize().width/8;
y=p.getSize().height/8;
g.setColor(Color.red);
g.fillOval(x,y,4,4);
g.dispose();
}

int x,y;
Graphics g=getGraphics();

Donde p es un panel.

Gracias
  #2 (permalink)  
Antiguo 06/03/2007, 13:17
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Duda con los puntos

Hola:

Para dibujar bien y que no se te borren las cosas, debes heredar del componente sobre el que quieras dibujar (en tu caso un JPanel) y redefinir el método paint(). Ahí debes dibujar con el Graphics que te pasen y no llames al dispose().

Aquí tienes un ejemplo básico de pintado en java.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 06/03/2007, 17:54
 
Fecha de Ingreso: diciembre-2006
Mensajes: 24
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Duda con los puntos

Ok,muchas gracias. Ya logre dibujarlo(antes de ver este post), pero tengo el problema que me comentas,se me borran los puntos si abro y cierro,o restauro,maximizo la ventana,etc.El codigo que tengo es el siguiente...

private void BEjemploMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
Graphics g=getGraphics();
x=p.getX();
y=p.getY();
x_max = (p.getSize().width + x)-20;
y_max = (p.getSize().height + y)-20;
for (int i=0;i<5;i++){
do
coord_x = rnd.nextInt();
while ((coord_x<x)||(coord_x>x_max));
do
coord_y = rnd.nextInt();
while ((coord_y<y)||(coord_y>y_max));
g.setColor(Color.red);
g.fillOval(coord_x,coord_y,20,20);
puntos[i]=new Point(coord_x+10,coord_y+10);
}

La pregunta es como lo hago desde el metodo paint, y eso de heredar??Si me pudieran poner algo de codigo para asi verlo, lo agradeceria.

Otra pregunta,con Point, guardo las coordenadas de los puntos verdad?Luego para acceder tanto a la componente x como a y de ese punto,simplemente con puntos[1].x accedo a la componente x del punto 1 verdad??

Estoy muy verde, en esto de la programacion orientada a objetos y me gustaria que me ayudaran.

Muchas gracias por responder.
  #4 (permalink)  
Antiguo 06/03/2007, 23:01
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Duda con los puntos

Hola:

Si sigues el link que te puse, verás el código de ejemplo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 13/03/2007, 17:55
 
Fecha de Ingreso: diciembre-2006
Mensajes: 24
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Duda con los puntos

Ok,muchas gracias.Despues de estar "peleandome" de mala manera con los Panel's he obtenido algo pero el problema es que no me saca nada por pantalla y no veo el fallo(quizas sea uno bastante sencillo, pero en cualquier otro lenguaje yo lo haria asi)...Bueno aqui pongo basicamente lo necesario para poder transmitir mi problema.


.....
for (int i=0;i<Numero_Nodos;i++){
do
coord_x = rnd.nextInt();
while ((coord_x<x)||(coord_x>x_max));
do
coord_y = rnd.nextInt();
while ((coord_y<y)||(coord_y>y_max));
Panel.Opcion=1;
Panel.x=coord_x;
Panel.y=coord_y;
.....

Y panel lo tengo implementado en una clase

public class MiPanel extends JPanel{
int Opcion, x, y;

/** Creates a new instance of MiPanel */
public MiPanel() {
}
public void paint(Graphics g) {
if (Opcion == 1)
{
g.setColor(Color.red);
g.fillOval(this.x,this.y,10,10);
}
}

}

¿Que puede estar pasando?Muchas graciasss!!
  #6 (permalink)  
Antiguo 14/03/2007, 12:08
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Duda con los puntos

Hola:

Bueno, el panel hay que añadirlo a un JFrame o JDialog y visualizarlo. Eso supongo que lo haces.

Despues de cambiar x,y y opcion, hay que llamar a repaint() del panel, para provocar el pintado. Entre tanto bucle, deberías poner tiempos de espera porque si no no verás nada pintarse.

Tambien es posible que los panel.x y panel.y caigan fuera de la parte visible, por lo que aunque se dibuje el ovalo, no se vea por estar fuera de la zona visible del panel. Puedes poner un System.out.println () de x y de y en el metodo paint() para ver qué pinta tienen esos valores. Deberían ser enteros entre 0 y el alto/ancho en pixels del panel para que se vea algo.

Prueba a poner panel.x=10, panel.y=10 y panel.Opcion=1 sin tanto bucle y pintar a ver si se ve algo, así descartas si es del panel el problema o de los bucles.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 19/03/2007, 13:13
 
Fecha de Ingreso: diciembre-2006
Mensajes: 24
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Duda con los puntos

Vale,buenas noticias!!El problema es de los bucles.No se porque motivo pero no me cae dentro del panel la mayoria de los puntos. Es decir al poner esto me crea el punto perfecto.Ahora solo quiero generar una serie de puntos aleatoriamente.¿Como lo hago, porque de la manera anterior es lo mas sencillo y no me o hace bien?

int coord_x,coord_y;
int x,y,x_max,y_max;
x=Panel.getX();
y=Panel.getY();
System.out.println(x);
System.out.println(y);
x_max = (Panel.getSize().width + x)-20;
System.out.println(x_max);
y_max = (Panel.getSize().height + y)-20;
System.out.println(y_max);
Panel.Opcion=1;
Panel.x=400;
Panel.y=50;
Panel.repaint();
//punto[i]=new Point(coord_x+10,coord_y+10);
SigPaso.setEnabled(true);
Reini.setEnabled(true);
Term.setEnabled(true);
BOk.setEnabled(false);
Num_nodos.setEnabled(false);
  #8 (permalink)  
Antiguo 19/03/2007, 16:21
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Duda con los puntos

Hola:

Math.random() te da un numero aleatorio entre 0 y 1 (con decimales, por supuesto). Si tu ancho es de 400, Math.random()*400 te dará un número entre 0 y 400, que cae dentro de la pantalla. Lo mismo para el alto, Math.random()*50.

Aunque es para C, quizás te ayude este tutorial de cómo obtener números aleatorios.
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #9 (permalink)  
Antiguo 19/03/2007, 18:46
 
Fecha de Ingreso: diciembre-2006
Mensajes: 24
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Duda con los puntos

Holaaaa,ya casi esta...
El problema ahora es que solo me genera un punto al pulsar el boton.Es decir,quisiera que me generara un numero de puntos aleatorios cada vez. Por ejemplo si le meto 3, solo me genera uno...Si le doy a un boton que tengo de restrablecer,se me vuelve a activar, y me vuelve a generar otro y asi...

Supongo que sera problema del bucle que tengo y que la funcion paint del Jpannel que tengo reimplementada solo se me ejecuta una vez...

Este es mi codigo...

for (int i=0;i<Numero_Nodos;i++){
coord_x=(int)Math.round(Math.random()*dif_x);
coord_y=(int)Math.round(Math.random()*dif_y);
Panel.Opcion=1;
Panel.x=coord_x;
Panel.y=coord_y;
Panel.repaint();
punto[i]=new Point(coord_x+10,coord_y+10);
}

y el codigo del paint del jpannel...

public void paint(Graphics g) {
if (Opcion == 1)
{
g.setColor(Color.red);
g.fillOval(this.x,this.y,10,10);
}
}

Tio te hago un monumento,muchisimas graciasss.A ver si ya se soluciona esto..
  #10 (permalink)  
Antiguo 19/03/2007, 22:59
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Duda con los puntos

Hola:

En el bucle metes siempre en el mismo x e y el punto aleatorio obtenido (en Panel.x y Panel.y), luego pintas ese punto (sólo estás pintando uno). Así que solo pinta al último.

Si estas guardando los puntos en punto[i], en el paint() haz un bucle y pinta los punto[i].x y punto[i].y

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #11 (permalink)  
Antiguo 20/03/2007, 08:04
 
Fecha de Ingreso: diciembre-2006
Mensajes: 24
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Duda con los puntos

Si señor!!!Eres un crackk!!Muchisimas gracias tio!!Ya dejo de dar la vara con los dichosos puntos,que me traian por el camino de la amargura,jajaja.Gracias de nuevoo!!Ahora pondre otro post,que tengo que solucionar como borrar el panel.

GRACIASSSSS!!
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 00:50.