Ayuda con programa de graficos en java

Iniciado por phoenix_88, 26 Febrero 2013, 15:45 PM

0 Miembros y 1 Visitante están viendo este tema.

phoenix_88

Hola a todos, quisiera saber si alguno de uds me podria colaborar para elaborar un applet en el cual hayan 2 botones de tal manera que al presionar uno de los botones genere figuras al azar empezando más debajo de la coordenada 60, 80 y con el otro limpie la pantalla.

Les agradezco si me pudieran colaborar con esto ya que he estado buscando sobre el tema pero no he logrado comprender.

1mpuls0

._. no sé donde búscaste o a qué te refieres con que no encontraste.

http://xolaltenco.wordpress.com/2007/10/14/dibuja-figuras-en-java/
http://casidiablo.net/codigo-java-graficos-2d/

y tienes un mal concepto de "Colaborar"
http://es.wikipedia.org/wiki/Colaboraci%C3%B3n

Con esa actitud nadie aqui te ayudará.

Saludos.
abc

phoenix_88

Bueno si disculpa la verdad es la primera vez que ingreso pero tal vez la desesperación a este inconveniente me llevo a plantear mal la pregunta, en realidad lo que no se es como hacer para que al presionar el boton genere figuras aleatoriamente sin necesidad de crear mas botones.

Slds.

1mpuls0

Cóloca lo que llevas de código y te ayudo.

Saludos.
abc

phoenix_88

Hola, mira lo que llevo no se que tengo mal pero al ejecutarlo la ventana del applet queda en blanco.

Te agradezco si me pudieras indicar cual es el problema.

Buen día.

import java.applet.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class actividad3 extends Applet implements ActionListener{

public void init() {   
setSize(460,320);
}
   Label label;
   Button b1,b2,b3,b4;
   boolean circulo = false;
   boolean cuadrado= false;
   boolean triangulo= false;
   Color color;

   actividad3(String titulo){
       setLayout(new FlowLayout());
       setBackground(Color.CYAN); // define las caracteristicas de la ventana del programa uno
       Font fuente = new Font("Verdana",Font.BOLD,30);
       label = new Label("");label.setFont(fuente);
       color = new Color(aleatorio(255),aleatorio(255),aleatorio(255));
       b1 = new Button("Circulo"); // crea los botones de la parte superior
     b2 = new Button("Cuadrado");
     b3 = new Button("Triangulo");
     b4 = new Button("Limpia");
     add(b1);add(b2);
     add(b3);add(b4);
     b1. addActionListener(this);
     b2. addActionListener(this);
     b3. addActionListener(this);
     b4. addActionListener(this);


       addWindowListener(new WindowAdapter() {public void
       windowClosing(WindowEvent e) {setVisible(false);}});
   }
public void actionPerformed(ActionEvent ae) {
     if (ae.getSource() == b1) { // muestra la figura del circulo
        circulo = true;cuadrado = false;triangulo=false;
     }
     else
          if (ae.getSource() == b2) { // muestra la figura del cuadrado
        cuadrado = true;circulo = false;triangulo=false;
          }
        else
            if (ae.getSource() == b4) { // limpia la pantalla
        circulo = false;triangulo=false;cuadrado = false;
         }
       else
          if (ae.getSource() == b3) { // muestra la figura del triangulo
        triangulo = true;cuadrado = false;circulo = false;
          }
     repaint();
  }
     public void paint(Graphics g) {
         if (circulo) { //define las coordenadas y el borde del circulo color rojo
                g.setColor(Color.red);
                        int x1 = 110;
                        int y1 = 150;
               g.drawOval(x1,y1,100,100);
              g.translate(x1, y1);
                 }
      else
       if (cuadrado) { //define las coordenadas, determina un color de fondo y a la figura le determina un color de relleno
              g.setColor( color );;
        setBackground(Color.black);
        int x1 = 110,y1 = 150;
        g.drawRect(x1,y1,100,100);
        g.fillRect( x1,y1,100,100 );
                 }
      else
           if (triangulo) { //define las coordenadas y el borde del circulo color naranja
                g.setColor(Color.ORANGE);

              int x1= 100,y1= 50,z1= 200;
              int a1= 100,y3 = 50,c1= 0;
              int d1= 200,e1= 150,f1= 1;
              g.drawLine(x1, y1, z1,150);
              g.drawLine(a1,  y3, c1,150);
                g.drawLine(d1, e1, f1,150);
           }}
      private int aleatorio( int rango ) {

        double retornoMath;
        retornoMath = Math.random();

        return( (int)( retornoMath * rango ) );
       }

        private void addWindowListener(WindowAdapter windowAdapter) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    }

1mpuls0

Listo!
Perdona lo tuve que hacer con nb no tengo mucho tiempo.
Solo te toca "limpiar" el código xD

Saludos.

Código (java) [Seleccionar]

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package figuras;

import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;
/**
*
* @author Darhius929
*/
public class PintaFiguras extends java.applet.Applet {

    /**
     * Initializes the applet PintaFiguras
     */
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * This method is called from within the init() method to initialize the
     * form. WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        etiquetaFiguras = new java.awt.Label();
        botonCirculo = new java.awt.Button();
        botonCuadrado = new java.awt.Button();
        botonTriangulo = new java.awt.Button();
        botonLimpiar = new java.awt.Button();

        etiquetaFiguras.setFont(new Font("Verdana",Font.BOLD,30));
        etiquetaFiguras.setText("Figuras");
        add(etiquetaFiguras);

        botonCirculo.setLabel("Circulo");
        botonCirculo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCirculoActionPerformed(evt);
            }
        });
        add(botonCirculo);

        botonCuadrado.setLabel("Cuadrado");
        botonCuadrado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCuadradoActionPerformed(evt);
            }
        });
        add(botonCuadrado);

        botonTriangulo.setLabel("Triangulo");
        botonTriangulo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonTrianguloActionPerformed(evt);
            }
        });
        add(botonTriangulo);

        botonLimpiar.setLabel("Limpia");
        botonLimpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonLimpiarActionPerformed(evt);
            }
        });
        add(botonLimpiar);
    }// </editor-fold>

    private void botonCirculoActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
       
        esCirculo = true;
        esCuadrado = false;
        esTriangulo = false;
        repaint();
    }

    private void botonLimpiarActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        esLimpiar = true;
        esCirculo = false;
        esCuadrado = false;
        esTriangulo = false;
        repaint();
    }

    private void botonTrianguloActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        esCirculo = false;
        esCuadrado = false;
        esTriangulo = true;
        repaint();
    }

    private void botonCuadradoActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        esCirculo = false;
        esCuadrado = true;
        esTriangulo = false;
        repaint();
    }
   
   
    public void paint(Graphics g) {
        if(esCirculo) {
            g.setColor(Color.RED);
            int x1 = 110;
            int y1 = 150;
            g.drawOval(x1,y1,100,100);
            g.translate(x1, y1);
        }else if(esCuadrado) {
            g.setColor(obtenerColorAleatorio(255, 255, 255));
            this.setBackground(Color.BLACK);
            int x1 = 110, y1 = 150;
            g.drawRect(x1,y1,100,100);
            g.fillRect( x1,y1,100,100 );
        }else if(esTriangulo) {
            g.setColor(Color.ORANGE);
            int x1= 100,y1= 50,z1= 200;
            int a1= 100,y3 = 50,c1= 0;
            int d1= 200,e1= 150,f1= 1;
            g.drawLine(x1, y1, z1,150);
            g.drawLine(a1,  y3, c1,150);
            g.drawLine(d1, e1, f1,150);
        }else {
            this.setBackground(Color.CYAN);
        }
    }
   
    private Color obtenerColorAleatorio(int R, int G, int B) {
        int aleatorioR = (int)(Math.random()*R);
        int aleatorioG = (int)(Math.random()*G);
        int aleatorioB = (int)(Math.random()*B);
       
        Color colorAleatorio = new Color(aleatorioR, aleatorioG, aleatorioB);
       
        return colorAleatorio;
    }
   
    private boolean esCirculo = false;
    private boolean esCuadrado = false;
    private boolean esTriangulo = false;
    private boolean esLimpiar = false;
    // Variables declaration - do not modify
    private java.awt.Button botonCirculo;
    private java.awt.Button botonCuadrado;
    private java.awt.Button botonLimpiar;
    private java.awt.Button botonTriangulo;
    private java.awt.Label etiquetaFiguras;
    // End of variables declaration
}
abc

phoenix_88

Darhius muchisimas gracias por tu ayuda.

Aprovechando te queria preguntar si conoces algún método o si tienes algún link donde me pueda guiar para que con un solo boton me genere las figuras de forma aleatoria sin necesidad de crear mas botones.

Slds.

1mpuls0

#7
Pues... se me ocurrió lo siguiente xD tal vez puedas darte una idea y mejorarlo.

Código (java) [Seleccionar]

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package figuras;

/**
*
* @author Darhius929
*/
public class Aleatorio {
   
   public static void main(String args[]) {
       new Aleatorio();
   }
   
   public Aleatorio() {

       String arregloFiguras[] = {"circulo", "cuadrado", "triangulo"};
       
       int figuraAleatoria = seleccionaAleatorio(0,arregloFiguras.length-1);
       System.out.println(figuraAleatoria);
       String nombreFigura = arregloFiguras[figuraAleatoria];
       
       if(nombreFigura.equalsIgnoreCase("circulo")) {
           System.out.println("Dibuja circulo");
           //esCirculo = true;
       }else if( nombreFigura.equalsIgnoreCase("cuadrado")) {
           System.out.println("Dibuja cuadrado");
           //esCuadrado = true;
       }else {
           System.out.println("Dibuja triangulo");
           //esTriangulo = true;
       }
       
   }
   
   public  int seleccionaAleatorio(int minimo, int maximo) {
       return (int) Math.round(((Math.random() * (maximo - minimo)) + minimo));
   }
   
}


Si lo vas a hacer así te recomiendo que utilices el método seleccionaAleatorio (me costo uno y el otro xD) si solo se utiliza
Math.random() * tamanoArreglo en este caso se iba hasta el índice 3 :/ y ocurria "ArrayIndexOutOfBoundsException" y si hacia
Math.random() * tamanoArreglo - 1 cuando el índice era 0 se obtenia el índice -1 xD

Saludos.
abc