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

Problema con código

Estas en el tema de Problema con código en el foro de Java en Foros del Web. Hola a tod@s!! Estoy con un código de java que debería generar una serie de figuras geométricas y luego estas poder ser arrastradas por el ...
  #1 (permalink)  
Antiguo 15/02/2010, 08:50
Avatar de arkuel  
Fecha de Ingreso: abril-2008
Ubicación: León
Mensajes: 17
Antigüedad: 16 años
Puntos: 0
Problema con código

Hola a tod@s!!

Estoy con un código de java que debería generar una serie de figuras geométricas y luego estas poder ser arrastradas por el usuario. En mi caso es una bañera que está formada por dos rectángulos y un circulo. El caso es que no me pinta nada y me da una excepcion de java.lang.nullpointer, segun esta excepción es que va algo que llega a vacio pero si en vez de poner el codigo ahi lo pongo en un método dentro de la clase principal no me llega nada a vacio y me lo muestra sin problemas. Me estoy volviendo loca intentando averiguar el por que; os dejo el código y si alguien me puede exar un cable se lo agradezco. Gracias.

Código:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;

public class DragTest {

public static void main(String[] args) {
  MyWindow window = new MyWindow();
    window.setVisible(true);
    window.setPreferredSize(new Dimension(400,400));
    window.pack();
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}
class MyWindow extends JFrame{
  public MyWindow(){
    super("Drag test");
    Container container = getContentPane();
    container.setLayout(null);

//     MyButton boton1 = new MyButton("Move me");
//    container.add(boton1);
//    boton1.setBounds(10, 10, 100, 30);

    MyBañera bañera = new MyBañera("bañera");
    container.add(bañera);
    bañera.paint(getGraphics());
    

  }
}
//class MyButton extends JButton implements MouseMotionListener{
//  public MyButton(String text){
//    super.setText(text);
//    addMouseMotionListener(this);
//  }

//public void mouseDragged(MouseEvent mme) {
//    setLocation(
//        this.getX() + mme.getX() - this.getWidth() / 2,
//        this.getY() + mme.getY() - this.getHeight() / 2
//    );
//  }
//  public void mouseMoved(MouseEvent mme) {}
//}

class MyBañera extends JApplet implements MouseMotionListener{
  public MyBañera(String text){
    super.setName(text);
    addMouseMotionListener(this);
  }

    @Override
  public void paint(Graphics g){

        Graphics2D g2 = (Graphics2D)g;
        //Una bañera
         //Una bañera
        g2.setColor(Color.BLACK);
        Rectangle2D r = new Rectangle2D.Float(50.0f, 50.0f,110.0f, 200.0f);
        g2.fill(r);
        g2.setColor(Color.BLUE);
        RoundRectangle2D rr = new RoundRectangle2D.Float(
        60.0f, 60.0f, 90.0f, 180.0f, 25.0f, 25.0f);
        g2.fill(rr);
        g2.setColor(Color.DARK_GRAY);
        Ellipse2D e = new Ellipse2D.Float(100.0f, 80.0f, 10.0f, 10.0f);
        g2.fill(e);
        g2.draw(r);
        g2.draw(rr);
        g2.draw(e);
    }
public void mouseDragged(MouseEvent mme) {
    setLocation(
        this.getX() + mme.getX() - this.getWidth() / 2,
        this.getY() + mme.getY() - this.getHeight() / 2
    );
  }
  public void mouseMoved(MouseEvent mme) {}
}
  #2 (permalink)  
Antiguo 16/02/2010, 12:37
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: Problema con código

Hola cómo estás?
Te comento que da una exception (null pointer) porque el componente debe estar visible para poder utilizar getGraphics() o sea que antes de obtener los gráficos debes tener visible la ventana...

además tenés que quitar el código que dice container.setLayout(null) si no, no se ve.

otra cosa, en el mouseDragged deberías repintar todo el componente nuevamente porque si no se va a ver mal...

Cualquier cosa avisame

Última edición por pablor21; 16/02/2010 a las 23:59

Etiquetas: Ninguno
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:17.