Applet en java no termina ejecucion

Iniciado por andrex.125, 18 Octubre 2013, 06:25 AM

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

andrex.125

Hola, estoy haciendo un Applet en java que gráfica la función F(x) = x,  osea una recta, ya termine el ejercicio lo pruebo y funciona, el problema mio es que el applet nunca termina y por esta razón no gráfica la recta. quisiera que me pudiera ayudar si saben como solucionarlo. Gracias.



import java.applet.Applet;
import java.awt.*;
import javax.swing.JOptionPane;

public class AppletGrafica extends Applet {

    int x1[] = new int[5];

    public void init() {
       

    }

    public static void ejeXyY(Graphics a) {
        a.setColor(Color.black);
        a.drawLine(50, 275, 500, 275);//eje x
        a.drawLine(275, 50, 275, 500);//eje y
        a.setColor(Color.red);

    }

    public static void divisionPlano(Graphics a) {

        for (int i = 0; i < 19; i++) { // se dibuja la division del plano
            a.setColor(new Color(0, 0, 0));
            a.drawLine(273, 50 + (25 * i), 277, 50 + (25 * i));
            a.drawLine(50 + (25 * i), 273, 50 + (25 * i), 277);
        }
        int j = -1;
        for (int i = -9; i <= 9; i++) { // dibujamos los numero del eje X y eje Y

            j++;

            String x = Integer.toString(i);

            a.drawString(x, 50 + (25 * j), 273);
        }
        int h = -1;
        for (int i = 9; i >= -9; i--) {
            String x = Integer.toString(i);
            h++;
            if (!"0".equals(x)) {
                a.drawString(x, 263, 50 + (25 * h));
            }

        }
    }

    public void paint(Graphics a) {
        ejeXyY(a);
        divisionPlano(a);
        int x;
        int menor = 10;
        int max = 0;
        for (int i = 0; i < 5; i++) {
            do {
                x = Integer.parseInt(JOptionPane.showInputDialog(null, "digite f(x) " + (i + 1)));
                //pedimos al usuario que dijite 5 valores de x y los guardamos en un arreglo
                x1[i] = x;
               
            } while ((x > 10) || (x < -10)); //verifico que el numero no sea mayor ni menor que 10, porque plano solo va hasta 9 y -9
             a.fillOval (275+(x * 25),275+(x *-25),2,2);//vamos dibujando los puntos que ingresa el usuario
             a.drawOval (275+(x * 25),275+(x *-25),2,2);
               
        }
       
        for (int i = 0; i < 5; i++) { // saco menor numero y el mayor del arreglo para hacer la recta
            // System.out.println(n);
            if (x1[i] < menor) {
                menor = x1[i];
                System.out.println("este es el menor " + menor);
            }
        }
        for (int i = 0; i < 5; i++) {
            // System.out.println(n);
            if (x1[i] > menor) {
                max = x1[i];
                System.out.println("este es el mayor " + max);
            }
        }
        a.setColor(new Color(0, 0, 0));
        a.drawLine(275 + (menor * 25), 275 + (menor * -25), 275 + (max * 25), 275 + (max * -25));// se dibuja la recta.

       
    }
}

Ismaw34

#1
Saludos,

En solucion de tu problema, he de advertirte que si vas a compilar el Applet para ejecutarlo en el Explorador de internet, a ninguno les gusta el JOptionPane o similares frames que se creen.

De todas maneras me he tomado la libertad de ponerle algo interesante

Código (java) [Seleccionar]
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JOptionPane;

public class AppletGrafica extends Applet {

   int x1[] = new int[5];
   
   public void init() {
    this.addKeyListener(new KeyListener() {

@Override
public void keyTyped(KeyEvent arg0) {
}

@Override
public void keyReleased(KeyEvent arg0) {
if (arg0.getKeyCode() == KeyEvent.VK_R) {
insertaDatos();
}
}

@Override
public void keyPressed(KeyEvent arg0) {
}
});
   }
   
   public void start() {
    insertaDatos();
   }
   
   public void insertaDatos() {
    int x;
    for (int i = 0; i < 5; i++) {
           x = Integer.parseInt(JOptionPane.showInputDialog(null, "digite f(x) " + (i + 1)));
           //pedimos al usuario que dijite 5 valores de x y los guardamos en un arreglo
           x1[i] = x;
   }
    repaint();
   }
   
   public void ejeXyY(Graphics a) {
       a.drawLine(50, 275, 500, 275);//eje x
       a.drawLine(275, 50, 275, 500);//eje y
   }

   public void divisionPlano(Graphics a) {

       for (int i = 0; i < 19; i++) { // se dibuja la division del plano
           a.drawLine(273, 50 + (25 * i), 277, 50 + (25 * i));
           a.drawLine(50 + (25 * i), 273, 50 + (25 * i), 277);
       }
       int j = -1;
       for (int i = -9; i <= 9; i++) { // dibujamos los numero del eje X y eje Y

           j++;

           String x = Integer.toString(i);

           a.drawString(x, 50 + (25 * j), 273);
       }
       int h = -1;
       for (int i = 9; i >= -9; i--) {
           String x = Integer.toString(i);
           h++;
           if (!"0".equals(x)) {
               a.drawString(x, 263, 50 + (25 * h));
           }

       }
   }

   public void paint(Graphics a) {
    super.paint(a);
    a.setColor(Color.BLACK);
       ejeXyY(a);
       divisionPlano(a);
       int menor = 10;
       int max = -10;
       for (int i = 0; i < 5; i++) {
        if (x1[i]< 10 && x1[i] > -10) {
        a.fillOval (275+(x1[i] * 25),275+(x1[i] *-25),2,2);//vamos dibujando los puntos que ingresa el usuario
           a.drawOval (275+(x1[i] * 25),275+(x1[i] *-25),2,2);}
       }
       
       for (int i = 0; i < 5; i++) { // saco menor numero y el mayor del arreglo para hacer la recta
           // System.out.println(n);
           if (x1[i] < menor) {
               menor = x1[i];
               System.out.println("este es el menor " + menor);
           }
       }
       for (int i = 0; i < 5; i++) {
           // System.out.println(n);
           if (x1[i] > max) {
               max = x1[i];
               System.out.println("este es el mayor " + max);
           }
       }
       a.drawString("Re inserta datos con \"R\"", 10, 10);
       a.drawLine(275 + (menor * 25), 275 + (menor * -25), 275 + (max * 25), 275 + (max * -25));// se dibuja la recta.
       a.dispose();
   }
}


Cambios:

llamar a super.paint(g); para baciar el buffer
g.dispose(); llama para avisar que ya has terminado de usarlo
en el init() he puesto el manejador de "Reset"
en el start() llamamos al primer "Reset"
creado el metodo de reset, que inserta los datos dentro de x1
Cambiados varios codigos de colores que no te servian para nada

Espero haberte ayudado,

-Ismaw34