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

Consulta teórica

Estas en el tema de Consulta teórica en el foro de Java en Foros del Web. Hola, Estoy empezando con esto de Java, y tengo una duda para manejar un menu JMenu, una vez que pulsas en los JMuenuItem, lo suyo ...
  #1 (permalink)  
Antiguo 16/10/2015, 14:45
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Consulta teórica

Hola,

Estoy empezando con esto de Java, y tengo una duda para manejar un menu JMenu, una vez que pulsas en los JMuenuItem, lo suyo es que estos muestren JPanel verdad¿ no se si me he explicado bien, osea que cada item del menu corresponda a un JPanel del programa. ¿Estoy en lo cierto?
  #2 (permalink)  
Antiguo 17/10/2015, 01:47
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Consulta teórica

Buenas,

Tu aplicacion debe tene un solo JFrame que actue como marco principal, algo que parece que tienes claro.
Los jpanel tienen que ir dentro de un marco contenedor, ya sea un JFrame o un JDialog.

Cada vez que abras una nueva ventana desde el JMenu tiene que ser un JDialog, el cual puede incluir uno o varios JPanel si lo deseas.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 17/10/2015, 03:09
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: Consulta teórica

Entiendo, ¿cada vez que pulso un botón en el JMenu se abrirá una ventana nueva?
¿No es posible hacer todo desde la misma venta?
  #4 (permalink)  
Antiguo 17/10/2015, 04:17
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: Consulta teórica

La verdad que ando perdido, estoy empezando, tengo el siguiente código, lo que pretendo es que cada vez que pulso en un JMenuItem este muestre el contenido del metodo y ocuelte lo que esta, mostrar lo muestra correctamente, pero una vez dibujado ya no lo quita, por lo que siempre esta lo mismo pulse lo que pulses, no se como se trabaja para ir mostrando los contenidos que quiero en cada JMenuItem, os pongo mi código, a ver si me lo podéis plantear de otra forma:

Código Java:
Ver original
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package dni;
  7.  
  8. import javax.swing.JFrame;
  9. /**
  10.  *
  11.  * @author skirlappa
  12.  */
  13. public class Ejecucion
  14. {
  15.   public static void main (String[] args)
  16.   {
  17.     DNI marco = new DNI();
  18.     marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  19.     marco.setSize(800,400);
  20.     marco.setVisible(true);
  21.     marco.setResizable(false);
  22.     marco.setLocationRelativeTo(null);
  23.   }
  24.  
  25. }
  #5 (permalink)  
Antiguo 17/10/2015, 04:20
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: Consulta teórica

Y esta es la classe DNI:
Código Java:
Ver original
  1. Calsse DNI
  2.  
  3. [HIGHLIGHT="Java"]
  4. /*
  5.  * To change this license header, choose License Headers in Project Properties.
  6.  * To change this template file, choose Tools | Templates
  7.  * and open the template in the editor.
  8.  */
  9. package dni;
  10.  
  11. import java.awt.BorderLayout;
  12. import java.awt.Color;
  13. import java.awt.Container;
  14. import java.awt.FlowLayout;
  15. import java.awt.Font;
  16. import java.awt.GridBagConstraints;
  17. import java.awt.GridBagLayout;
  18. import java.awt.Point;
  19. import static java.awt.SystemColor.menu;
  20. import java.awt.event.ActionEvent;
  21. import java.awt.event.ActionListener;
  22. import java.awt.event.KeyEvent;
  23. import javax.swing.BorderFactory;
  24. import javax.swing.Icon;
  25. import javax.swing.ImageIcon;
  26. import javax.swing.JButton;
  27. import javax.swing.JFrame;
  28. import javax.swing.JMenu;
  29. import javax.swing.JMenuBar;
  30. import javax.swing.JMenuItem;
  31. import javax.swing.JLabel;
  32. import javax.swing.JOptionPane;
  33. import javax.swing.JPanel;
  34. import javax.swing.JTextField;
  35. import javax.swing.SwingConstants;
  36.  
  37. /**
  38.  *
  39.  * @author
  40.  */
  41. public class DNI extends JFrame
  42. {
  43.     private JLabel campoDNI1 ,logos, logoFianal, titulo, campoNombre, campoApellidos, campoDNI, campoFecha;
  44.     private JLabel barraEstado;
  45.     private JTextField textDNIModificarRegistro, textNombre, textApellidos, textDNI, textFecha;
  46.     private JMenu gestiones, buscador, informacion;
  47.     private JMenuItem altas, gestionesItem, bajas, DNI, nombre, autor, ayuda, aviso, modificar;
  48.     private BorderLayout esquema;
  49.     private JButton alta, altaModificarRegistro;
  50.     private JPanel PanelAltas;
  51.  
  52.    
  53.     public DNI()
  54.     {
  55.         //Creamos el texto
  56.         super("DNI OVER");
  57.         //esquema = new BorderLayout(5,5);
  58.         setLayout(null);
  59.        
  60.         //Cremoas la barra del menu
  61.         JMenuBar menu = new JMenuBar();
  62.        
  63.         //Creamos cada opción simple en el menu
  64.         gestiones = new JMenu("Gestiones");
  65.         altas = new JMenuItem ("Altas");
  66.         gestionesItem = new JMenuItem ("Gestiones realizadas");
  67.         modificar = new JMenuItem("Modificar un registro");
  68.         bajas = new JMenuItem ("Dar de baja");
  69.        
  70.        
  71.         buscador = new JMenu("Buscador");
  72.         DNI = new JMenuItem ("Por DNI");
  73.         nombre = new JMenuItem ("Por nombre");
  74.        
  75.         informacion = new JMenu("Ayuda");
  76.         autor = new JMenuItem ("Autor");
  77.         ayuda = new JMenuItem ("Ayuda");
  78.         aviso = new JMenuItem ("Aviso legal");
  79.        
  80.         //Añadimos el logo
  81.  
  82.         Icon logo = new ImageIcon(getClass().getResource("../img/log.png"));
  83.         logos = new JLabel("", logo, SwingConstants.CENTER);
  84.         logos.setBounds(225, 140, 350, 75);
  85.         add(logos);
  86.         logos.setVisible(true);
  87.        
  88.        //Añadimos la barra de estado con información del autor.
  89.         barraEstado = new JLabel ("Autor");
  90.         add(barraEstado, BorderLayout.SOUTH);
  91.        
  92.         //añadimos la barra
  93.         setJMenuBar(menu);
  94.         //Añadimos cada opcion del menu
  95.  
  96.        
  97.         manejadorCampo manejador = new manejadorCampo();
  98.        
  99.         menu.add(gestiones);
  100.         gestiones.add(altas);
  101.         altas.addActionListener(manejador);
  102.        
  103.         gestiones.add(modificar);
  104.         modificar.addActionListener(manejador);
  105.        
  106.         gestiones.add(gestionesItem);
  107.         gestiones.add(bajas);
  108.        
  109.         menu.add(buscador);
  110.         buscador.add(DNI);
  111.         buscador.add(nombre);
  112.        
  113.         menu.add(informacion);
  114.         informacion.add(autor);
  115.         informacion.add(ayuda);
  116.         informacion.add(aviso);
  117.        
  118.  
  119.        }
  120.     //Aqui va el evento.
  121.        
  122.         public void altas()
  123.         {          
  124.                    //PanelAltas = new JPanel(new FlowLayout());
  125.                     //JLabel titulo de la pagina//
  126.                    titulo = new JLabel("ALTAS");
  127.                    //Creo el tamaño y la fuenta del texto
  128.                    Font auxFont = titulo.getFont();
  129.                    titulo.setFont(new Font(auxFont.getFontName(),auxFont.getStyle(),30));
  130.                    // Lo pongo en la posición deseada
  131.                    titulo.setBounds(325, 25, 100, 25);
  132.                    //Agrego
  133.                    add(titulo);
  134.                    //titulo.setVisible(false);
  135.                    //////////////////////////
  136.                    //Cremos el camo nombre
  137.                    campoNombre = new JLabel("Nombre:");
  138.                    campoNombre.setBounds(200, 50, 75, 75);
  139.                    add(campoNombre);
  140.                    //campoNombre.setVisible(false);
  141.                    ////////////
  142.                    //Campo Apellidos//
  143.                    campoApellidos = new JLabel("Apellidos:");
  144.                    campoApellidos.setBounds(200, 70, 75, 75);
  145.                    add(campoApellidos);
  146.                    //campoApellidos.setVisible(false);
  147.                    ////////////////////
  148.                    //Campo DNI ////
  149.                    campoDNI = new JLabel("DNI:");
  150.                    campoDNI.setBounds(200, 90, 75, 75);
  151.                    add(campoDNI);
  152.                    //campoDNI.setVisible(false);
  153.                    /////fecha/////
  154.                    campoFecha = new JLabel("Fecha caducidad:");
  155.                    campoFecha.setBounds(200, 110, 100, 75);
  156.                    add(campoFecha);
  157.                    //campoFecha.setVisible(false);
  158.                    ///////////
  159.                   //Creamos el campo textFiel nombre//
  160.                    textNombre = new JTextField(null);
  161.                    textNombre.setBounds(325, 80, 200, 20);
  162.                    add(textNombre);
  163.                    //textNombre.setVisible(false);
  164.                    /////////////
  165.                    textApellidos = new JTextField("");
  166.                    textApellidos.setBounds(325, 100, 200, 20);
  167.                    add(textApellidos);
  168.                    //textApellidos.setVisible(false);
  169.                    /////////////
  170.                    textDNI = new JTextField("");
  171.                    textDNI.setBounds(325, 120, 200, 20);
  172.                    add(textDNI);
  173.                    //////////////
  174.                    textFecha = new JTextField("");
  175.                    textFecha.setBounds(325, 140, 200, 20);
  176.                    add(textFecha);
  177.                    //textFecha.setVisible(false);
  178.                    ///Creamos el boton para registrar el DNI
  179.                    alta = new JButton("Registrar DNI");
  180.                    alta.setBounds(325, 180, 200, 20);
  181.                    add(alta);
  182.                    //alta.setVisible(false);
  183.         }
  184.         public void modificarRegistro()
  185.         {
  186.             boolean controlModificarRegistro = false;
  187.             if(controlModificarRegistro==false)
  188.             {
  189.                 //Campo DNI ////
  190.                    campoDNI1 = new JLabel("DNI:");
  191.                    campoDNI1.setBounds(200, 90, 75, 75);
  192.                    add(campoDNI1);
  193.                    campoDNI1.setVisible(false);
  194.                    
  195.                   ///
  196.                    textDNIModificarRegistro = new JTextField("");
  197.                    textDNIModificarRegistro.setBounds(325, 120, 200, 20);
  198.                    add(textDNIModificarRegistro);
  199.                    textDNIModificarRegistro.setVisible(false);
  200.                    ///Creamos el boton para registrar el DNI
  201.                    altaModificarRegistro = new JButton("Buscar DNI dfdd");
  202.                    altaModificarRegistro.setBounds(325, 180, 200, 20);
  203.                    add(altaModificarRegistro);
  204.                    altaModificarRegistro.setVisible(false);
  205.             }
  206.         }
  207.         public void falso()
  208.         {
  209.             //Creamos el JPanel
  210.            
  211.             //Declaramos con esta funcion todo NO VISIBLE
  212.             altas();
  213.             titulo.setVisible(false);
  214.             campoNombre.setVisible(false);
  215.             campoApellidos.setVisible(false);
  216.             campoDNI.setVisible(false);
  217.             campoFecha.setVisible(false);
  218.             textNombre.setVisible(false);
  219.             textApellidos.setVisible(false);
  220.             textFecha.setVisible(false);
  221.             alta.setVisible(false);
  222.             modificarRegistro();
  223.             campoDNI1.setVisible(false);
  224.             textDNIModificarRegistro.setVisible(false);
  225.             altaModificarRegistro.setVisible(false);
  226.         }
  227.          public void logo()
  228.          {
  229.         Icon logos = new ImageIcon(getClass().getResource("../img/log.png"));
  230.         logoFianal = new JLabel("", logos, SwingConstants.CENTER);
  231.         logoFianal.setBounds(225, 140, 350, 75);
  232.         add(logoFianal);
  233.          }
  234.         private class manejadorCampo implements ActionListener
  235.         {
  236.             public void actionPerformed(ActionEvent evento)
  237.             {  
  238.                 if(evento.getSource()== altas)
  239.                 {
  240.                     //getContentPane().setBackground(Color.BLACK);
  241.                     //ventanas alta = new ventanas();
  242.                     //alta.altas();
  243.                             logos.setVisible(false); //Oculto el logo
  244.                             falso(); //intento hacer invisible todos los componentes, no funciona
  245.                             altas();
  246.                             logo();
  247.                             repaint();
  248.                            
  249.                 }
  250.                 else if(evento.getSource()== modificar)
  251.                 {
  252.                             logos.setVisible(false); //Oculto el logo
  253.                             falso(); //intento hacer invisible todos los componentes, no funciona
  254.                             modificarRegistro();
  255.                             campoDNI1.setVisible(true);
  256.                             textDNIModificarRegistro.setVisible(true);
  257.                             altaModificarRegistro.setVisible(true);
  258.                             logo();
  259.                             repaint();
  260.                 }
  261.             }
  262.            
  263.         }
  264.    
  265. }
[/HIGHLIGHT]
  #6 (permalink)  
Antiguo 17/10/2015, 07:01
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Consulta teórica

Uff, no no.

El codigo:
Código Java:
Ver original
  1. marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  2.     marco.setSize(800,400);
  3.     marco.setVisible(true);
  4.     marco.setResizable(false);
  5.     marco.setLocationRelativeTo(null);

Deberia ir en el constructor de DNI.

Por otro lado, asi no se arranca una aplicacion Swing. Esta debe lanzarse en el hilo de eventos, llamado EDT.
https://docs.oracle.com/javase/tutor.../dispatch.html

Tu main deberia ser algo como:

Código Java:
Ver original
  1. public static void main (String[] args) {
  2.     SwingUtilities.invokeLater(new Runnable() {
  3.         public void run() {
  4.             new DNI();
  5.         }
  6.     });
  7.   }

O mejor aun, si utilizas Java 8 te ahorras la clase anonima:


Código Java:
Ver original
  1. public static void main (String[] args) {
  2.     SwingUtilities.invokeLater(() -> {
  3.         new DNI();
  4.     });
  5.   }


Por otro lado te he comentado que debes crear JDialogs. No veo eso por ninguna parte.

Te aconsejo que empieces desde la base en lugar de lanzar codigo a diestro y sinistro. Si sigues asi vas a consumir tu tiempo y tus fuerzas sin aprender apenas ni llegar a ninguna parte.
Te recomiendo que al menos sigas este tutorial antes de continuar:
http://zetcode.com/tutorials/javaswingtutorial/

Una vez entendido el funcionamiento basico des las APIs de Swing, te recomiendo que te apoyes en un IDE como Netbeans que incorpora un editor grafico de las interfaces que te va a facilitar enormemente la tarea.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 17/10/2015, 07:28
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: Consulta teórica

Estoy siguiendo el libro de piensa en Java de Editel, y me estoy quedando loco, voy a ver tu manual y voy a ver si saco el trabajo adelante. Gracias!
  #8 (permalink)  
Antiguo 20/10/2015, 03:22
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Consulta teórica

Buenas,

En relacion a Netbeans, lo mejor es que consultes su documentacion, que es excelente. En concreto, respecto al uso de su editor Swing, puedes comenzar por aqui:
https://netbeans.org/kb/docs/java/quickstart-gui.html

Y tambien puedes encontrar multitud de videos en You Tube con mucha informacion al respecto:
https://www.youtube.com/results?sear...+gui+netbeans+


Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: programa
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 07:06.