JTabbedPane con GUI builder de netbeans

Iniciado por peixiño, 22 Febrero 2013, 13:47 PM

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

peixiño

Hola,

Soy nuevo aquí. Estoy haciendo una aplicación para mi proyecto de fin de carrera.

Quiero preguntaros unas dudas que tengo sobre los paneles de pestañas JTabbedPane.

Estoy programando una aplicación con un JFrame inicial que pida un número entero, que será el número de pestañas que necesito. Al darle a aceptar, se abrirá otra ventana (daría igual JFrame que Dialog, ¿no?) con un panel con el núemro de pestañas solicitado anteriormente.

Haciéndolo a mano (sin el builder), no es complicado, pero el tema es que estoy trabajando con el GUI builder de Netbeans. En los paneles de dentro de las pestañas tengo que trabajar con muchos JTextFields y JLabels, por lo que hacerlo a mano me lleva mucho tiempo y no queda tan bien estructurado mediante gridlayouts.

No consigo hacer que en el segundo JFrame (o Dialog) se cree el número de pestañas pedido, pues sólo soy capaz de diseñar desde el prinicipio con un número fijo de ellas. Desgraciadamente, no se puede modificar el initComponents() para hacerle un bucle para crearlas...

¿Me podéis echar una mano con esto? Ya digo que tiene que ser con el GUI builder.

Espero haberme explicado claramente.

Muchas gracias

sapito169

#1
las ideas malas es mejor apartarlas de la cabeza

es como que no te guste un tipo de película y luego te pasas la vida criticando a ese genero y criticando el poco talento de sus actores y directores pero lo haces molesto y te interesa mucho el porque hacen esas películas

Luego después de un análisis y pensamiento profundo simplemente te das cuenta que fue una estupidez criticarlos que no vale prestarle interés si no te gusta simplemente no lo ves y no tienes ninguna razón coherente para tener algún tipo de molestia o enojo por ver una película que no te gusta


si algo que no tiene importancia y no es fundamental simplemente te causa problemas hacerlo simplemente no lo haces y no te amargas la vida tratando de hacer algo que no tiene valor.Es mejor tratar de buscar una solución mas simple talvez en el futuro después de un constante entrenamiento practica y estudio resulte muy fácil de hacerlo de la manera complicada y mas cool , pero si te faltan los tiempos y no es trascendental pues simplemente no lo haces

Como agregar codigo en netbeans de forma programatica?

Código (java) [Seleccionar]
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication7;

/**
*
* @author luis
*/
public class NewJFrame extends javax.swing.JFrame {

   /**
    * Creates new form NewJFrame
    */
   public NewJFrame() {
       initComponents();
       setTitle("titulo");<---Aqui agrego todo el codigo que quiera sin ninguna restricion
       
   }

   /**
    * This method is called from within the constructor to initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is always
    * regenerated by the Form Editor.
    */
   @SuppressWarnings("unchecked")
   
   /**
    * @param args the command line arguments
    */
   public static void main(String args[]) {
       /*
        * Set the Nimbus look and feel
        */
       //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
       /*
        * If Nimbus (introduced in Java SE 6) is not available, stay with the
        * default look and feel. For details see
        * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
        */
       try {
           for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
               if ("Nimbus".equals(info.getName())) {
                   javax.swing.UIManager.setLookAndFeel(info.getClassName());
                   break;
               }
           }
       } catch (ClassNotFoundException ex) {
           java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
       } catch (InstantiationException ex) {
           java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
       } catch (IllegalAccessException ex) {
           java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
       } catch (javax.swing.UnsupportedLookAndFeelException ex) {
           java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
       }
       //</editor-fold>

       /*
        * Create and display the form
        */
       java.awt.EventQueue.invokeLater(new Runnable() {

           public void run() {
               new NewJFrame().setVisible(true);
           }
       });
   }
   // Variables declaration - do not modify
   // End of variables declaration
}



mira que después del método initComponents() puedes escribir lo que se te venga en gana dentro. Incluso puedes poner el bucle del que estas hablando.

del método initComponents todo es auto generado y no es editable es una ***** que alguien te diga que no eres lo suficiente mente inteligente como para editar el código que tu mismo creaste (no estoy molesto con tigo)

como crear un panel de entrada de datos?

el panel en si
Código (java) [Seleccionar]

package javaapplication7;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class PanContacto extends JPanel {

   private JPanel pnEtiquetas = new JPanel();
   private JPanel panComponentes = new JPanel();
   private JPanel panPrincipal = new JPanel();
   private JPanel panBotones =new JPanel();
   private JLabel lblNombre = new JLabel("Nombre");
   private JLabel lblApellido = new JLabel("Apellido");
   private JLabel lblDirecion = new JLabel("Direcion");
   private JLabel lblEdad = new JLabel("Edad");
   private JLabel lblPais = new JLabel("Pais");
   
   private JTextField txtNombre = new JTextField();
   private JTextField txtApellido = new JTextField();
   private JTextField txtDirecion = new JTextField();
   private JTextField txtEdad = new JTextField();
   private JTextField txtPais = new JTextField();

   private JButton btnAceptar=new JButton("Aceptar");
   private JButton btnCancelar=new JButton("Cancelar");
   
   public PanContacto() {
       setLayout(new BorderLayout());
       add(panPrincipal, BorderLayout.NORTH);

       panPrincipal.setLayout(new BorderLayout());
       panPrincipal.add(pnEtiquetas, BorderLayout.WEST);
       panPrincipal.add(panComponentes, BorderLayout.CENTER);
       panPrincipal.add(panBotones,BorderLayout.SOUTH);
               
       pnEtiquetas.setLayout(new GridLayout(5, 1));
       pnEtiquetas.add(lblNombre);
       pnEtiquetas.add(lblApellido);
       pnEtiquetas.add(lblDirecion);
       pnEtiquetas.add(lblEdad);
       pnEtiquetas.add(lblPais);

       panComponentes.setLayout(new GridLayout(5, 1));
       panComponentes.add(txtNombre);
       panComponentes.add(txtApellido);
       panComponentes.add(txtDirecion);
       panComponentes.add(txtEdad);
       panComponentes.add(txtPais);

       panBotones.setLayout(new FlowLayout(FlowLayout.RIGHT));
       panBotones.add(btnAceptar);
       panBotones.add(btnCancelar);

   }
}

}



ejecutar una aplicacion que use el panel

Código (java) [Seleccionar]

package javaapplication7;

import javax.swing.JFrame;

public class Apliaccion {

   public void comiensa() {
       
       JFrame frame = new JFrame("");
       frame.add(new PanContacto());
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setSize(300,400);
       frame.setLocationRelativeTo(null);
       frame.setVisible(true);
               
   }

   public static void main(String arg[]) {
       new Apliaccion().comiensa();
   }
}


https://www.dropbox.com/s/d5ng4tqqov23761/formulario.png

sapito169

váyanse a la **** los malditos hijos de **** que por la  **** no me permiten escribir como **** se me pega la regalada gana

solo es broma no se lo tomen en serio ;D

peixiño


Antes de nada gracias por tu tiempo y por tu respuesta.

Entiendo tu postura. Hasta ahora los componentes SWING siempre los fui programando a mano. Pero en este caso estoy haciendo una excepción. Quiero meter en cada tabbedPane varias JTextField, JLabels y botones. Lo tengo hecho así mediante GridLayouts, pero creéme que en este caso prefiero la flexibilidad del GUI builder. Queda mucho más amistoso a la vista del usuario final, y es más fácil de "dejarlo bonito".

Perdí muchísimo tiempo para alinear bien cada componente de los GridLayouts, con sus GridLayouts superiores e inferiores, así que en esta ocasión me rendí a la sencillez del GUI builder, que está hecho especialmente para esto, para el diseño de interfaces gráficas.

Lo dicho, gracias igualmente por el tiempo que te has tomado añadiendo los ejemplos.

Sobre lo que estoy preguntando, a ver si alguien me puede echar una mano...

sapito169

#4
quieres algo asi?
https://www.dropbox.com/s/p2c7z5srb1yek47/pantall%20con%20varios%20paneles.png


primero creas los formularios con netbeans y su paleta

https://www.dropbox.com/s/p3bvl5a1ok8w6c1/EjemploPanelNetbeansSelectorContratos.JPG

https://www.dropbox.com/s/pfw2j0bsdef26xi/EjemploPanelNetbeansContrato.JPG

y luego hago esto

https://www.dropbox.com/s/cbc04c5cj13nhpm/diagramaActividadAgregaPanelesDinamicos.JPG

y en código es así

Código (java) [Seleccionar]


package javaapplication7;

public class FrmPrincipal extends javax.swing.JFrame {

   
   public FrmPrincipal() {
       initComponents();
   }

   @SuppressWarnings("unchecked")
   // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
   private void initComponents() {
        ----->basura autogenerada aqui
   }// </editor-fold>                        

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

   private void btnMostrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       FrmContratos frmContratos = new FrmContratos(this,true);
       frmContratos.setMeses(txtMeses.getText());
       frmContratos.setVisible(true);
   }                                          


   public static void main(String args[]) {
       java.awt.EventQueue.invokeLater(new Runnable() {

           public void run() {
               new FrmPrincipal().setVisible(true);
           }
       });
   }
   // Variables declaration - do not modify                    
   private javax.swing.JButton btnMostrar;
   private javax.swing.JComboBox jComboBox1;
   private javax.swing.JLabel jLabel1;
   private javax.swing.JLabel jLabel2;
   private javax.swing.JTextField txtMeses;
   // End of variables declaration                  
}



Código (java) [Seleccionar]

package javaapplication7;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JTextArea;



public class FrmContratos extends javax.swing.JDialog {

   private ServicioDeContratos servicioDeContratos = new ServicioDeContratos();

   public FrmContratos(java.awt.Frame parent, boolean modal) {
       super(parent, modal);
       initComponents();
   }

   @SuppressWarnings("unchecked")
   // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
   private void initComponents() {
          ----->basura autogenerada aqui
   }// </editor-fold>                        
   // Variables declaration - do not modify                    
   private javax.swing.JTabbedPane jTabbedPane1;
   // End of variables declaration                  

   void setMeses(String textoMeses) {
       String[] meses = textoMeses.split(",");

       for (String mes : meses) {
           agreagTab(mes);
       }


   }

   private void agreagTab(String mes) {
       jTabbedPane1.addTab(mes, creaPanelParaElMes(mes));
   }

   private JPanel creaPanelParaElMes(String mes) {
       JPanel jPanel = new JPanel();
       jPanel.setLayout(new BorderLayout());
       jPanel.add(new JTextArea(servicioDeContratos.getContratoDelMes(mes)));
       return jPanel;
   }
}


Código (java) [Seleccionar]

package javaapplication7;

public class ServicioDeContratos {

   public String getContratoDelMes(String mes) {
       return "Contrato Del mes:" + mes + "\nblalalba lbala b l albla lal balbl\n\nblalalba lbala b l albla lal balbl";
   }
}



porfavor responde