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

Menus llamando clases

Estas en el tema de Menus llamando clases en el foro de Java en Foros del Web. Hola amigos, el día de hoy vengo con una duda... verán, hice algunas clases en java con netbeans para graficar, una de ellas es esta: ...
  #1 (permalink)  
Antiguo 02/03/2011, 23:38
 
Fecha de Ingreso: octubre-2010
Mensajes: 93
Antigüedad: 14 años
Puntos: 0
Menus llamando clases

Hola amigos, el día de hoy vengo con una duda... verán, hice algunas clases en java con netbeans para graficar, una de ellas es esta:

GraphingData.java
Código Java:
Ver original
  1. import java.awt.*;
  2. import javax.swing.*;
  3.  
  4. public class GraphingData extends JPanel {
  5. int x0,xN,y0,yN;
  6. double xmin,xmax,ymin,ymax;
  7. int h, w;
  8.  
  9.    
  10. public void paintComponent(Graphics g) {
  11.  
  12.     super.paintComponent(g);
  13.     Graphics2D g2 = (Graphics2D)g;
  14.     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
  15.                             RenderingHints.VALUE_ANTIALIAS_ON);
  16.     double x1,y1,x2,y2;
  17.     int j1,j2;
  18.     w=this.getParent().getWidth();
  19.     h=this.getParent().getHeight();
  20.     x0 = y0 = 0;
  21.     xN = w-1;
  22.     yN = h-1;
  23.     xmin = -5.0;
  24.     xmax = 5.0;
  25.     ymin = -7.0;
  26.     ymax = 1.0;
  27.  
  28.     j1 = ValorY( 0 );
  29.  
  30.     g2.setPaint(Color.blue);
  31.  
  32.     for( int i=0; i < w; i++ ){
  33.          j2 = ValorY( i+1 );
  34.          g2.drawLine(i,j1,i+1,j2 );
  35.         j1 = j2;
  36.     }//for en el que se imprimen los valores de la grafica
  37. }
  38.  
  39. private int ValorY( int valor ) {
  40.          double x,y;
  41.          int retorno;
  42.          // Cartesianas equivalentes al punto de la pantalla
  43.          x = (valor * (xmax-xmin) / (h-1)) + xmin;
  44.          // Calculamos LA FUNCION
  45.          y = (3*x*x) -6;
  46.          // Escalamos la coordenada y dentro de los limites de la ventana
  47.          retorno = (int)( (y-ymin) * (w-1) / (ymax-ymin) );
  48.          // Reconvertinos el valor cartesiano a punto de pantalla
  49.          retorno = h - retorno;
  50.          return( retorno );
  51. }//funcion ValorY
  52. }//fin de la clase

Después lo que estoy intentando hacer es generar un menú con los trabajos que he hecho, para que en vez de abrir clase por clase, mi maestro vea el menu y de ahi seleccione el trabajo que va a calificar

tarea.java
Código Java:
Ver original
  1. import javax.swing.*;
  2. import java.awt.event.*;
  3. import java.awt.event.*;
  4. public class tarea extends JFrame {
  5.  
  6.     public tarea() {
  7.         initComponents();
  8.     }
  9.  
  10.    
  11.     @SuppressWarnings("unchecked")
  12.     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  13.     private void initComponents() {
  14.  
  15.         jPopupMenu1 = new javax.swing.JPopupMenu();
  16.         jMenuBar1 = new javax.swing.JMenuBar();
  17.         Unidad1 = new javax.swing.JMenu();
  18.         Suma = new javax.swing.JMenuItem();
  19.         Coseno = new javax.swing.JMenuItem();
  20.         Funcion = new javax.swing.JMenuItem();
  21.         GraficarSeno = new javax.swing.JMenuItem();
  22.  
  23.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  24.  
  25.         Unidad1.setText("Unidad1");
  26.         Unidad1.addActionListener(new java.awt.event.ActionListener() {
  27.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  28.                 Unidad1ActionPerformed(evt);
  29.             }
  30.         });
  31.  
  32.         Suma.setText("Suma Producto");
  33.         Unidad1.add(Suma);
  34.  
  35.         Coseno.setText("Graficar Coseno");
  36.         Unidad1.add(Coseno);
  37.  
  38.         Funcion.setText("Funcion");
  39.         Funcion.addKeyListener(new java.awt.event.KeyAdapter() {
  40.             public void keyPressed(java.awt.event.KeyEvent evt) {
  41.                 FuncionKeyPressed(evt);
  42.             }
  43.         });
  44.         Unidad1.add(Funcion);
  45.  
  46.         GraficarSeno.setText("Graficar Seno");
  47.         Unidad1.add(GraficarSeno);
  48.  
  49.         jMenuBar1.add(Unidad1);
  50.  
  51.         setJMenuBar(jMenuBar1);
  52.  
  53.         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  54.         getContentPane().setLayout(layout);
  55.         layout.setHorizontalGroup(
  56.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  57.             .addGap(0, 400, Short.MAX_VALUE)
  58.         );
  59.         layout.setVerticalGroup(
  60.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  61.             .addGap(0, 279, Short.MAX_VALUE)
  62.         );
  63.  
  64.         pack();
  65.     }// </editor-fold>//GEN-END:initComponents
  66.  
  67.     private void Unidad1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Unidad1ActionPerformed
  68.        
  69.     }//GEN-LAST:event_Unidad1ActionPerformed
  70.  
  71. private void FuncionKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_FuncionKeyPressed
  72.         JFrame f = new JFrame();
  73.         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  74.         f.add(new GraphingData());
  75.         f.setSize(400,400);
  76.         f.setLocation(200,200);
  77.         f.setVisible(true);
  78.     }//GEN-LAST:event_FuncionKeyPressed
  79.  
  80.     public static void main(String args[]) {
  81.         java.awt.EventQueue.invokeLater(new Runnable() {
  82.             public void run() {
  83.                 new tarea().setVisible(true);
  84.             }
  85.         });
  86.     }
  87.  
  88.     // Variables declaration - do not modify//GEN-BEGIN:variables
  89.     private javax.swing.JMenuItem Coseno;
  90.     private javax.swing.JMenuItem Funcion;
  91.     private javax.swing.JMenuItem GraficarSeno;
  92.     private javax.swing.JMenuItem Suma;
  93.     private javax.swing.JMenu Unidad1;
  94.     private javax.swing.JMenuBar jMenuBar1;
  95.     private javax.swing.JPopupMenu jPopupMenu1;
  96.     // End of variables declaration//GEN-END:variables
  97.  
  98. }

el problema radica en las líneas 71 en adelante en la funcion FuncionKeyPressed, son las mismas líneas que agrego en el main de la clase GraphingData para que al momento de correrla salga la funcion, pero en este caso, al mandarla llamar desde la clase tarea no pasa nada... quisiera que porfavor me orientaran y de ante mano muchisimas gracias por la ayuda que siempre me dan

Última edición por celineadiction; 02/03/2011 a las 23:57
  #2 (permalink)  
Antiguo 03/03/2011, 14:05
Avatar de sivadmp  
Fecha de Ingreso: febrero-2011
Ubicación: La Paz - Bolivia
Mensajes: 293
Antigüedad: 13 años, 9 meses
Puntos: 20
Respuesta: Menus llamando clases

hola

una observacion que te hago, las clases en Java siempre se declaran con la primera letra en Mayuscula, esto por la estandarizacion de la codificacion en Java.

la funcion Unidad1ActionPerformed esta mal, por que vas a crear un frame nuevo cada ves que ocurra el evento, es decir si haces click 10 veces en el menu "graficar seno", te van a aparecer 10 ventanas "frames", y eso esta muy mal

lo que tienes que hacer es crear una sola ves, tu panel de grafica y actualizarlo de acuerdo al menu que se haya presionado

primeramente instanciamos el panel de la grafica y lo adicionamos al centro de nuestro Frame

Código java:
Ver original
  1. private GraphingData graphics=null;
  2.    
  3.     public Tarea() {
  4.         graphics = new GraphingData();
  5.         this.setLayout(new BorderLayout());
  6.         initComponents();
  7.        
  8.         this.add(graphics,"Center");
  9.         this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  10.     }

en la clase GraphingData, van a exisitir dos metodos para graficar, uno va a ser drawSeno y drawCoseno

tenemos que tener dos atributos por ejemplo, un atributo de tipo booleano seno y otro coseno, y una funcion setSeno que nos va a permitir actualizar el valor del atributo seno.

Código java:
Ver original
  1. private boolean seno;
  2.     private boolean coseno;
  3.    
  4.     public void setSeno(boolean seno){
  5.         this.seno=seno;
  6.         this.repaint();
  7.     }
  8.    
  9.     public void setCoseno(boolean coseno){
  10.         this.coseno=coseno;
  11.         this.repaint();
  12.     }

tienes que notar, que en las funciones setters estamos actualizando la grafica mediante repaint()

dentro de la funcion paintComponent, vamos a llamar las dos funciones que hemos creado para realizar la grafica, siempre y cuando si el atributo coseno, se encuentra en verdadero vamos a poder graficar la funcion del coseno y asi sucesivamente

Código java:
Ver original
  1. protected void paintComponent(Graphics g) {
  2.         super.paintComponent(g);
  3.         Graphics2D g2 = (Graphics2D) g;
  4.        
  5.         if(seno)
  6.             drawSeno(g2);
  7.         if(coseno)
  8.             drawCoseno(g2);
  9.     }

y desde el menu "graficar seno" llamamos a la funcion setSeno

Código java:
Ver original
  1. GraficarSeno.addActionListener(new ActionListener() {
  2.             @Override
  3.             public void actionPerformed(ActionEvent arg0) {
  4.                 graphics.setSeno(true);
  5.                 graphics.setCoseno(false);
  6.             }
  7.         });

tus nuevas clases arregladas serian

Código java:
Ver original
  1. public class GraphingData extends JPanel {
  2.     int x0, xN, y0, yN;
  3.     double xmin, xmax, ymin, ymax;
  4.     int h, w;
  5.  
  6.     private boolean seno;
  7.     private boolean coseno;
  8.    
  9.     public void setSeno(boolean seno){
  10.         this.seno=seno;
  11.         this.repaint();
  12.     }
  13.    
  14.     public void setCoseno(boolean coseno){
  15.         this.coseno=coseno;
  16.         this.repaint();
  17.     }
  18.    
  19.     protected void paintComponent(Graphics g) {
  20.         super.paintComponent(g);
  21.         Graphics2D g2 = (Graphics2D) g;
  22.        
  23.         if(seno)
  24.             drawSeno(g2);
  25.         if(coseno)
  26.             drawCoseno(g2);
  27.     }
  28.  
  29.     private void drawSeno(Graphics2D g2d){
  30.         g2d.drawRect(10, 10, 120, 120);
  31.         g2d.drawString("Seno", 50, 50);
  32.     }
  33.    
  34.     private void drawCoseno(Graphics2D g2d){
  35.         g2d.drawOval(10, 10, 120, 120);
  36.         g2d.drawString("Coseno", 50, 50);
  37.     }
  38. }// fin de la clase

y

Código java:
Ver original
  1. public class Tarea extends JFrame {
  2.  
  3.     private GraphingData graphics=null;
  4.    
  5.     public Tarea() {
  6.         graphics = new GraphingData();
  7.         this.setLayout(new BorderLayout());
  8.         initComponents();
  9.         this.add(graphics,"Center");
  10.         this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  11.     }
  12.    
  13.     private void initComponents() {
  14.  
  15.         jPopupMenu1 = new javax.swing.JPopupMenu();
  16.         jMenuBar1 = new javax.swing.JMenuBar();
  17.         Unidad1 = new javax.swing.JMenu();
  18.         Suma = new javax.swing.JMenuItem();
  19.         Coseno = new javax.swing.JMenuItem();
  20.         Funcion = new javax.swing.JMenuItem();
  21.         GraficarSeno = new javax.swing.JMenuItem();
  22.  
  23.         Unidad1.setText("Unidad1");
  24.         Unidad1.addActionListener(new java.awt.event.ActionListener() {
  25.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  26.             }
  27.         });
  28.  
  29.         Suma.setText("Suma Producto");
  30.         Unidad1.add(Suma);
  31.  
  32.         Coseno.setText("Graficar Coseno");
  33.         GraficarSeno.setText("Graficar Seno");
  34.         Unidad1.add(GraficarSeno);
  35.        
  36.         Coseno.addActionListener(new ActionListener() {
  37.             @Override
  38.             public void actionPerformed(ActionEvent arg0) {
  39.                 graphics.setSeno(false);
  40.                 graphics.setCoseno(true);
  41.             }
  42.         });
  43.        
  44.         GraficarSeno.addActionListener(new ActionListener() {
  45.             @Override
  46.             public void actionPerformed(ActionEvent arg0) {
  47.                 graphics.setSeno(true);
  48.                 graphics.setCoseno(false);
  49.             }
  50.         });
  51.        
  52.         Unidad1.add(Coseno);
  53.  
  54.         Funcion.setText("Funcion");
  55.         Funcion.addKeyListener(new java.awt.event.KeyAdapter() {
  56.             public void keyPressed(java.awt.event.KeyEvent evt) {
  57.            
  58.             }
  59.         });
  60.         Unidad1.add(Funcion);
  61.         jMenuBar1.add(Unidad1);
  62.         setJMenuBar(jMenuBar1);
  63.     }
  64.     public static void main(String args[]) {
  65.         Tarea tarea=new Tarea();
  66.         tarea.setSize(500,500);
  67.         tarea.setVisible(true);
  68.     }
  69.     // Variables declaration - do not modify//GEN-BEGIN:variables
  70.     private javax.swing.JMenuItem Coseno;
  71.     private javax.swing.JMenuItem Funcion;
  72.     private javax.swing.JMenuItem GraficarSeno;
  73.     private javax.swing.JMenuItem Suma;
  74.     private javax.swing.JMenu Unidad1;
  75.     private javax.swing.JMenuBar jMenuBar1;
  76.     private javax.swing.JPopupMenu jPopupMenu1;
  77.     // End of variables declaration//GEN-END:variables
  78. }

agradecer no cuesta nada

saludos
  #3 (permalink)  
Antiguo 04/03/2011, 00:04
 
Fecha de Ingreso: octubre-2010
Mensajes: 93
Antigüedad: 14 años
Puntos: 0
Respuesta: Menus llamando clases

Gracias sivadmp, me ha sido de bastante ayuda (=
ahora solo falta saber si mi maestro me deja entregarlo asi, osea todas las funciones en una misma clase... si no pues solamente lo adapto... creo que lo que me fallaba, no mas bien, lo que me fallaba era la forma en que llamaba al método pero ahora lo entiendo

muchisimas gracias de nuevo (=

Etiquetas: clases, menus
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 08:57.