Problema con JButton y ordenación

Iniciado por Mai89, 9 Agosto 2011, 19:06 PM

0 Miembros y 2 Visitantes están viendo este tema.

Mai89

Os explico la otra tarde se me ocurrió crear un programilla para que me resolviera una serie de cuadros. El caso es que el método de cálculo lo hice en un momento, pero crear la ventana... puff.
El caso es que no tengo ni idea de cómo hacer ventanas y de cómo colocar los elementos, he estado viendo códigos por diversas webs y al final he conseguido eso que veis a continuación.

La idea es meter las tres variables y que me generara el cuadro cuando presionara el botón... pero no tengo ni idea de cómo hacerlo.
El caso es que creé dos paneles, el primer panel lo dividí en una matriz para ordenar los labels, cuadros de texto y el botón. En el segundo panel pondría la tabla que me resultaría de los cálculos y tal...
El caso es que al poner la matriz el cuadro que yo tenia con variables fijas para ver si me aparecía o no se esfumó y no hay narices a sacarlo...
Necesito una ayudita en general... así que.. yo dejo el código de la clase para que le echéis un vistazo y me matéis por mala programadora si es preciso xDD

Código (java) [Seleccionar]

//Atributo para crear la ventana
   private static JFrame ventanap;

   //Atributo para crear los paneles
   private static JPanel panel_norte;
   private static JPanel panel_central;
   
   //Atributos para la tabla(CENTRO)
   final String[] nombre_columna= {"n",
                                   "a",
                                   "I",
                                   "A",
                                   "M",
                                   "C"};
   private static JTable tabla;
   CalculoPrestamo calculo;

   //Atributos para crear los labels(NORTE)
   private  JLabel lab_Co;
   private JLabel lab_ano;
   private JLabel lab_interes;

   //Atributos para los cuadros de texto(NORTE)
   private static JTextField tf_Co;
   private static JTextField tf_ano;
   private static JTextField tf_interes;

   //Atributo botón y lo correspondiente a él.
   private static JButton boton;
   VentanaFrances crea_tabla;






   //CONSTRUCTOR
   public VentanaPrestamo() {

       // Crea la ventana pone nombre, ajusta el tamaño al contenido y la hace visible
       ventanap=new JFrame("Cuadro de Prestamo");
       ventanap.setSize(500,200);
       ventanap.setVisible(true);
       //cierra la ventana correctamente deteniendo el proceso y todo lo demás
       ventanap.setDefaultCloseOperation(ventanap.EXIT_ON_CLOSE);
       calculo=new CalculoPrestamo(15000, 5, 3);

       


       // Activa la colocacion para que podamos meter los paneles
       ventanap.setLayout(new BorderLayout());


       //Objetos correspondientes al panel NORTE
       panel_norte=new JPanel();
      //Coloco en el panel norte la etiqueta del capital inicial
       ventanap.setLayout(new GridLayout(4,3));
       lab_Co=new JLabel("Capital Inicial");
       lab_Co.setToolTipText("Capital Inical:");
       ventanap.add(lab_Co, BorderLayout.NORTH);

       tf_Co=new JTextField();
       tf_Co.setSize(20,10);
       ventanap.add(tf_Co, BorderLayout.NORTH);

       lab_interes=new JLabel("Tipo de Interes");
       lab_interes.setToolTipText("Tipo de Interes:");
       ventanap.add(lab_interes, BorderLayout.NORTH);

       tf_interes=new JTextField();
       tf_interes.setSize(20,10);
       ventanap.add(tf_interes, BorderLayout.NORTH);

       lab_ano=new JLabel("Año");
       lab_ano.setToolTipText("Nº de Años:");
       ventanap.add(lab_ano, BorderLayout.NORTH);

       tf_ano=new JTextField();
       tf_ano.setSize(20,10);
       ventanap.add(tf_ano, BorderLayout.NORTH);


       //Correspondiente al boton y lo que hace
       boton=new JButton("Generar cuadro");
       ventanap.add(boton, BorderLayout.NORTH);

       ventanap.add(null, BorderLayout.NORTH);

     
       

       //Creo la tabla, indico el tamaño y añado un scrollpane
       tabla=new JTable(calculo.resultado_tabla(), nombre_columna);
       tabla.setPreferredScrollableViewportSize(null);

       tabla.setForeground(Color.blue);
       tabla.setBackground(Color.LIGHT_GRAY);

       //Objetos correspondientes al panel CENTRAL
       panel_central=new JPanel();
       ventanap.setLayout(new BorderLayout());
       ventanap.setLayout(new GridLayout());
       ventanap.add(panel_central, BorderLayout.CENTER);
       panel_central.add(tabla);






Valkyr

Perdóname porque tan solo he leído el principio del código y he pensado en responderte algo que espero que te ayude.

Si quieres crear una ventana yo haría lo siguiente:

Heredaría de la clase JFrame, y pondría como atributos las tres labels y los tres fields, además del JButton. Es decir, sería algo así:

Código (java) [Seleccionar]

public class MiVentana extends JFrame {

        private JLabel label1;
private JLabel label2;
private JLabel label3;
private JTextField campo1;
private JTextField campo2;
private JTextField campo3;
private JButton botonCalculos;

public MiVentana(String tituloVentana){
                super();
                setTitle(tituloVentana);
                getContentPane().setLayout(null);
setResizable(false); //False indica que el usuario no puede cambiar el tamaño de la ventana, true indica que si puede cambiarlo
label1 = new JLabel("Capital Inicial");
label2 = new JLabel("Tipo de interés");
label3 = new JLabel("Año");

campo1 = new JTextField(30);
campo2 = new JTextField(30);
campo3 = new JTextField(40);

botonCalculos = new JButton("Generar cuadro");

botonCalculos.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
//Mostrar Informacion en otro JFrame o en un JDialog
}

});
                //Este metodo es para especificar que hacer al pulsar la X de la ventana
                addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
//Los valores de X, Y, WIDTH, HEIGHT los especificas para colocar los elementos en la posicion que desees de tu ventana
getContentPane().add(label1);
label1.setBounds(x, y, width, height);
getContentPane().add(label2);
label2.setBounds(x, y, width, height);
getContentPane().add(label3);
label3.setBounds(x, y, width, height);
getContentPane().add(campo1);
campo1.setBounds(x, y, width, height);
getContentPane().add(campo2);
campo2.setBounds(x, y, width, height);
getContentPane().add(campo3);
campo3.setBounds(x, y, width, height);
getContentPane().add(botonCalculos);
botonCalculos.setBounds(x, y, width, height);

                //Desde aqui hasta el final es para que la ventana aparezca centrada en la pantalla y para mostrarla
pack();
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
                //El metodo siguiente cambia el tamaño de la ventana
setSize(new java.awt.Dimension(540, 280));
setLocation((screenSize.width - 540) / 2, (screenSize.height - 280) / 2);
setVisible(true);
}
}


En este código estamos creando una ventana personalizada.

En la acción que debes realizar al pulsar el botón (he puesto un comentario indicando donde es) podrías o crear un JFrame nuevo, añadir los elementos que quieras mostrar o crear un JDialog y mostrar la información.

Me imagino que habrá muchas mas formas de realizar lo que tú quieres y que la forma que te propongo no será la mejor. Pero yo es una de las formas que he usado y me ha ido bastante bien.

Cualquier duda pregunta ;)

Saludos.

L0n3l1eR

Buenas noches hmmm no se por algunos hacen sus frames ala antigua .. pudiendole hacer con el palette pero en fin... Mira te recomiendo esta pagina donde te enseña a usar la mayoria de los componentes de la GUI.. Tablas, jtress etc..

http://chuwiki.chuidiang.org/index.php?title=Categor%C3%ADa:Java:SWING

Si te pones abusado puedes usar drag y drop del palette y la otra mitad ala antigua

Saludos!

Mai89

#3
Valkyr, estoy consiguiendo más decente con lo que me has pasado, pero esta parte del código no me compila y no tengo ni idea de porque es xDD
Código (java) [Seleccionar]
//Este metodo es para especificar que hacer al pulsar la X de la ventana
               addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});

L0n3l1eR, no es que haga las cosas al modo antiguo o al moderno, es que nunca me había puesto a hacer ventanas, en mi FP no me enseñaron a hacerlas =( y tampoco me explicaron nada, así que en este tema estoy muuy verde. En cualquier caso le estado echando un vistazo al enlace, y ya me lo he agregado a favoritos.

PD: Valkyr, acabo de darme cuenta de que somos paisanos!! xDD



Valkyr

Cita de: Mai89 en 11 Agosto 2011, 13:23 PM
Valkyr, estoy consiguiendo más decente con lo que me has pasado, pero esta parte del código no me compila y no tengo ni idea de porque es xDD
Código (java) [Seleccionar]
//Este metodo es para especificar que hacer al pulsar la X de la ventana
                addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});


Acabo de mirar el proyecto que tengo y lo tengo exactamente igual, así que lo único que se me ocurre es que no has importado estos dos paquetes:

Código (java) [Seleccionar]

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


Compruébalo, y si no es ese el problema pues me dices!! ;)

CitarPD: Valkyr, acabo de darme cuenta de que somos paisanos!! xDD

Jajaja cierto, no estamos muy lejos!! Poca gente he encontrado por aquí que sea de la región xD.

Por cierto, yo acabo de terminar 2º año de la carrera y a penas hemos visto cosas de interfaz gráfica de ventanas, pero por Internet está todo muy bien explicado y con Java la mayoría de cosas son bastante sencillicas.

Saludos y ya nos comentas!

Mai89

Pues tengo toda la clase import java.awt.event. importada así que no sé voy a seguir dándole vueltas al tema, y a colocarme bien lo demás.

Yo me hice el FP de Administración de Sistmas, y un año de Grado pero el grado se me fue a tomar viento y tuve que volver, más que nada porque no tenia pasta ni para pillar una habitación en un piso. Me resulta raro que deis Java en programación, normalmente se da C/C++, o por lo menos yo... Pero vamos este año tengo la intención de retomarla por la UNED



Valkyr

¿Cuál es el fallo que te da exactamente? Yo lo he compilado y ejecutado con Eclipse y no me ha dado ningún fallo.

Sí, el año pasado tuvimos Pascal y C++, este año hemos tenido C++, Java y C. No damos clases sobre el lenguaje en sí, si no de programación (salvo Java que si lo hemos visto a fondo en la asignatura de POO) y luego en las clases de prácticas es donde ya vemos las caracteristicas fundamentales del lenguaje. Pero vamos, siempre he pensado que la documentación de un lenguaje siempre va a estar ahí, la cuestión es saber usarlo xD.

La verdad que es mucho dinero el de un piso, yo este año he estado viviendo en uno y...se han ido muchas muchas perras jajaja.

Mai89

Perdón, he estado un poco ausente unos días. Pues no sé el fallo exactamente, ya te lo pondré con detalle, de momento voy a terminar de hacer la ventana y tal que ya le he pillado el truco a la colocación, cuando lo tenga todo colocado ya me preocuparé de la acción del botón en profundidad.

Pues mucha suerte con la carrera! yo al final paso de la uned, me voy a meter al DAM xD a distancia también, a ver que tal me va.



Debci

Excelentes respuestas valkyr.

Doy el tema por zanjado?

Saludos

Valkyr

Cita de: Debci en 22 Agosto 2011, 17:24 PM
Excelentes respuestas valkyr.

Doy el tema por zanjado?

Saludos


Se agradece :), y yo diría que sí, pero yo no soy el que ha creado el tema.

Saludos.