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

Socorro!!!! Que le pasa a esta línea????

Estas en el tema de Socorro!!!! Que le pasa a esta línea???? en el foro de Java en Foros del Web. Hola a todos. Tengo estoy atascado con un problema y me gustaria que alguien me echase una mano. Realmente estaría muy, pero que muy agradecido ...
  #1 (permalink)  
Antiguo 14/10/2005, 18:36
 
Fecha de Ingreso: abril-2005
Mensajes: 4
Antigüedad: 19 años
Puntos: 0
Socorro!!!! Que le pasa a esta línea????

Hola a todos. Tengo estoy atascado con un problema y me gustaria que alguien me echase una mano. Realmente estaría muy, pero que muy agradecido pq llevo bastante tiempo atascado con esto. Os cuento:

Necesito añadir en un panel con NULL LAYOUT una serie de lineas animadas (con el efecto de que crezcan con el tiempo hasta un punto dado), y que pueda colocar exactamente en una posicion determinada de ese Jpanel. Para explicarme mejor os posteo un trozo de codigo en donde se vea mas o menos lo que quiero hacer. En este ejemplo ya se ve que no estoy haciendo algo bien, porque no puedo añadir la linea en un JPanel dentro del JFrame principal (ya que sino no se ve la linea). Asi que el ejemplo lo pongo pintando la linea sobre el Frame directamente. Y el problema mas importante del ejemplo es que tengo que ponerle al JFrame un BorderLayout, en lugar del necesario nullLayout, ya que si no, la linea se pinta y luego desaparece. Ahí va el ejemplo:
Código:
//CLASE PRINCIPAL Prueba.java

import java.awt.*;
import javax.swing.*;

public class Prueba extends javax.swing.JFrame {
    private Linea l;
    private javax.swing.JButton jButton1;

    public Prueba() {

        jButton1 = new javax.swing.JButton();
        jButton1.setText("jButton1");

        jButton1.addActionListener(new java.awt.event.ActionListener() {
		public void actionPerformed(java.awt.event.ActionEvent evt) {
			jButton1ActionPerformed(evt);
		}
	});

        addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent evt) {
                     exitForm(evt);
		}
	});

	
       	getContentPane().add(jButton1, java.awt.BorderLayout.NORTH);
        pack();

        this.setBounds(100,100,550,450);
        
        Point inicio = new Point(100,200);
        Point fin = new Point (100,100);
        
        Graphics gp = this.getGraphics();
        
        Linea linea = new Linea(gp,inicio,fin);
        l=linea;
        this.getContentPane().add(linea);
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        this.l.simular();
        this.repaint();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new Prueba().show();
    }
}
//---------------------------------------------------------
//CLASE Linea.java

import java.awt.*;
import javax.swing.*;
import java.util.*;

import java.awt.*;
import javax.swing.*;
import java.awt.geom.Line2D;
import java.awt.BasicStroke;
import java.awt.geom.GeneralPath;


public class Linea extends Component{

    private int contadorInicial;
    private int contadorFinal;
    private Point puntoInicial;
    private Point puntoFinal;
    private int valorY;
    private Graphics g;


    public Linea(Graphics gr,Point ini, Point fin) {
        this.g = gr;
        this.puntoInicial = ini;
        this.puntoFinal =  fin;
        this.valorY=puntoInicial.y;
    }

    public void update( Graphics g ) {
        paint(g);
    }

    public void paint( Graphics g ) {
        Graphics2D g2d = (Graphics2D)g;
        BasicStroke estiloLinea = new BasicStroke(4);
        g2d.setStroke(estiloLinea);
        g2d.setColor(Color.red);
        if (!(valorY==puntoInicial.y)) {
            Point f = new Point (puntoFinal.x,valorY);
            Line2D.Float linea = new Line2D.Float(puntoInicial,f);
            g2d.draw(linea);
        }
    }

    public boolean simular () {
        while(this.valorY>this.puntoFinal.y) {
            this.valorY--;
            this.update(g);
            try {
              Thread.currentThread().sleep( 50 );
            } catch( InterruptedException e ) {
              System.out.println( e );
            }
        }
        return(true);
    }


}
Así, me gustaria poder hacer que la línea se quede donde se pintó al principio (en la posicion donde le indico), y además, que la línea se pinte en un Jpanel con NULL Layout que se haya añadido al Frame principal a modo de lienzo (y no en un CANVAS: en un JPanel...)
Hay alguien que pueda orientarme con algún consejo, ejemplo o cualquier cosa??? Muchisimas gracias a todos.
  #2 (permalink)  
Antiguo 17/10/2005, 12:12
 
Fecha de Ingreso: junio-2005
Mensajes: 37
Antigüedad: 18 años, 10 meses
Puntos: 0
Que tal, estube trabajando con graficos, y no se si te funcione esto pero puedes probar.

Lo que te recomiendo es que no agregues la linea como lo haces, sino que la pintes sobre tu Panel, en este caso en tu contenedor o puedes crear un panel que funcione exclusivamente como lienzo para el dibujado de tus lineas.

Bueno en el metodo del pintado paint(); de tu lienzo (panel), antes de dibujar cualquier cosa le pones la linea super.paint(g); donde "g" como ya sabes es tu objeto Graphics, esta linea evitara que se borren tus lineas, despue ya puedes comenzar a dibujar lo que quieras.

Puedes usar un Vector para ir guardando los objetos de las lineas que ya has creado, y en el paint del lienzo pones una rutina para que, cada vez que exista un cambio en el dibujo, dibuje todas la lineas nuevamente.

Por ultimo puedes refrescar tu dibujo haciendo el llamado repaint(); de tu lienzo.

Espero haberme explicado, y si tienes una duda hay me mandas un mensaje, digo yo tambien soy nuevo en esto, pero tal ves la solucionemos.

Saludos.
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 12:57.