Meter un Frame dentro de otro Frame

Iniciado por kikian94, 12 Marzo 2015, 19:35 PM

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

Usuario Invitado

Necesitas hacer algunos cambios. Por ejemplo:

Código (java) [Seleccionar]
@Override
public void actionPeformed(ActionEvent evt) {
   String target = evt.getActionCommand();
   switch(target.toLowerCase()) {
       case "crear población": createPopulation(evt); break;
       case "añadir provincia": createProvince(evt); break;
   }
}

private void createPopulation(ActionEvent evt) {
   // listProvinces viene a ser el JList que contiene las provincias
   Province province = (Province) listProvinces.getSelectedItem();
   NewPopulationDialog dialog = new NewPopulationDialog();
   // obtiene el controlador de la vista NewPopulationDialog
   NewPopulationDialogCtrl controller = dialog.getController();
   // le pasa al controlador la provincia a la cual se le
   // agregará la población
   controller.setProvinceTargered(province);
   dialog.setVisible(true);
}


Y en el controlador de NewPopulationDialog:

Código (java) [Seleccionar]
public class NewPopulationDialogCtrl {
   private NewPopulationDialog gui;
   private String province;
   
   public NewPopulationDialogCtrl(NewPopulationDialog gui) {
       this.gui = gui;
   }
   
   public String getProvinceTarget() {
       return province;
   }
   
   public setProvinceTarget(String province) {
       this.province = province;
   }
   
   /* En la vista obtenemos los datos de la nueva población
       y los asignamos a un objeto Population que se le pasa
       por parámetro a addPopulation para que lo guarde en el Map */
   public void addPopulation(Population) {
   
   }
   
   // otros métodos...
   
}


La vista NewPopulationDialog, debe asignar el nombre de la provincia en el label así:

Código (java) [Seleccionar]
label.setText(controller.getProvinceTarget());


Saludos.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

kikian94


eso es lo que debe de salir, me sale todo menos donde estan los guiones que tiene que ir la provincia seleccionada

esta es la clase principal:

Código (java) [Seleccionar]
package principal;
import java.awt.*;
import java.awt.event.*;
import Poblacion.VentanaBorrarPoblacion;
import Poblacion.VentanaCrearPoblacion;
import Provincia.VentanaBorrarProvincia;
import Provincia.VentanaCrearProvincia;
import paa.provincias.GestorAEMET;
import paa.provincias.GestorAEMETException;
import paa.provincias.IPoblacion;

/**
* Fichero: InterfazAWT_AEMET.java Clase que implementa la Interfaz Gráfica
* AEMET con awt.
*
* @author PAA
* @version 1.0
*/
public class InterfazAWT_AEMET extends Frame {
/**
*
*/
private static final long serialVersionUID = 502635761186556414L;

private static final String FICHERO = "almacen.dat";
private AlmacenPoblaciones almacen;

// private IAlmacenPoblaciones almacenPoblaciones;
private List listaPoblaciones = new List();
private List listaPredicciones = new List();
private List listaProvincias = new List();
private InterfazAWT_AEMET gui;
/**
* Constructor.
*
* @throws GestorAEMETException
*/
public InterfazAWT_AEMET(String titulo, int ancho, int alto) {
super(titulo);

setSize(ancho, alto);
setLocationRelativeTo(null);
setLayout(new BorderLayout()); // Layout de la aplicación, podría ser otro
almacen = RecuperarAlmacenPoblaciones();
System.out.println(almacen.getProvincias());
initComponents();
for(String provincia : almacen.getProvincias()){
listaProvincias.add(provincia);
}
//Imprimimos provincias y poblaciones en las listas
}

public AlmacenPoblaciones RecuperarAlmacenPoblaciones() {
// Recuperamos el almacén
AlmacenPoblaciones almacenPoblaciones1 = new AlmacenPoblaciones();

if (almacenPoblaciones1.recuperar(FICHERO))
System.out.println("Recuperado el almacen del fichero " + FICHERO);
else
System.out.println("No se pudo recuperar el almacen del fichero "+ FICHERO);
return almacenPoblaciones1;

}

private void initComponents() {

// Boton salir por defecto
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
guardarAntesDeSalir();
System.exit(0);
}
});

setMenuBar(addMenuBar());
this.add(addToolBar(), BorderLayout.NORTH);
this.add(addlineaEstado(), BorderLayout.SOUTH);
this.add(addPanelIzquierda(), BorderLayout.WEST);
this.add(addpredicciones(), BorderLayout.CENTER);
}

private MenuBar addMenuBar() {
// Sitúo los menús desplegables
MenuBar barraDeMenu = new MenuBar();

// Creo el menú Archivo
Menu menuArchivo = new Menu("Archivo");
MenuItem crearGuardar = new MenuItem("Guardar");
MenuItem crearCargar = new MenuItem("Cargar");
MenuItem salir = new MenuItem("Salir");
crearCargar.addActionListener(new Controller());
crearGuardar.addActionListener(new Controller());
salir.addActionListener(new Controller());
menuArchivo.add(crearCargar);
menuArchivo.add(crearGuardar);
menuArchivo.add(salir);

// Creo el menú Provincias
Menu menuProvincias = new Menu("Provincias");
MenuItem crearProvincias = new MenuItem("Crear provincia");
MenuItem borrarProvincias = new MenuItem("Borrar provincia");
crearProvincias.addActionListener(new Controller());
borrarProvincias.addActionListener(new Controller());
menuProvincias.add(crearProvincias);
menuProvincias.add(borrarProvincias);

// Creo el menu Poblaciones
Menu menuPoblaciones = new Menu("Poblaciones");
MenuItem crearPoblacion = new MenuItem("Crear poblacion");
MenuItem borrarPoblacion = new MenuItem("Borrar poblacion");
MenuItem ordenarNombre = new MenuItem("Ordenar por nombre");
MenuItem ordenarHabitantes = new MenuItem("Ordenar por habitantes");
MenuItem modPoblacion = new MenuItem("Modificar poblacion");
MenuItem movPoblacion = new MenuItem("Mover poblacion");
crearPoblacion.addActionListener(new Controller());
borrarPoblacion.addActionListener(new Controller());
ordenarNombre.addActionListener(new Controller());
ordenarHabitantes.addActionListener(new Controller());
modPoblacion.addActionListener(new Controller());
movPoblacion.addActionListener(new Controller());
menuPoblaciones.add(crearPoblacion);
menuPoblaciones.add(borrarPoblacion);
menuPoblaciones.add(ordenarNombre);
menuPoblaciones.add(ordenarHabitantes);
menuPoblaciones.add(modPoblacion);
menuPoblaciones.add(movPoblacion);

// Creo el menú de ayuda
Menu ayuda = new Menu("Ayuda");
MenuItem acercaDe = new MenuItem("Acerca de");
acercaDe.addActionListener(new AcercaDe());
ayuda.add(acercaDe);

// Crea el
barraDeMenu.add(menuArchivo);
barraDeMenu.add(menuProvincias);
barraDeMenu.add(menuPoblaciones);
// Sitúo el menú de ayuda en su sitio
barraDeMenu.setHelpMenu(ayuda);
return barraDeMenu;
}

private Panel addToolBar() {
// Sitúo la línea de botones
Panel lineaDeBotones = new Panel(new FlowLayout(FlowLayout.LEFT));
lineaDeBotones.setBackground(Color.lightGray);

// Boton crear provincia
Button proCrear = new Button("Crear provincia");
proCrear.addActionListener(new Controller());

// Boton crear poblacion
Button poCrear = new Button("Crear poblacion");
poCrear.addActionListener(new Controller());

// Boton actualizar prediccion
Button aPrediccion = new Button("Actualizar Predicción");
aPrediccion.addActionListener(new Controller());

// Añadir los botones a la barra
lineaDeBotones.add(proCrear);
lineaDeBotones.add(poCrear);
lineaDeBotones.add(aPrediccion);
return lineaDeBotones;
}

private Panel addPanelIzquierda() {
// Creamos panel para mostrar provincias y poblaciones y lo colocamos a
// la izquierda
Panel izquierda = new Panel(new GridLayout(4, 1));
Label lProvincia = new Label("Provincias:");
Label lPoblacion = new Label("Poblaciones:");
izquierda.add(lProvincia);
izquierda.add(listaProvincias);
izquierda.add(lPoblacion);
izquierda.add(listaPoblaciones);
return izquierda;
}

private Panel addpredicciones() {
// Creamos el panel de las predicciones
Panel predicciones = new Panel(new BorderLayout());
Label lPrediccion = new Label("Predicciones de :");
List tPrediccion = new List();
predicciones.add(lPrediccion, BorderLayout.NORTH);
predicciones.add(tPrediccion, BorderLayout.CENTER);
return predicciones;
}

private Panel addlineaEstado() {
// Sitúo la línea de estado
Panel lineaDeEstado = new Panel();
lineaDeEstado.setLayout(new FlowLayout(FlowLayout.LEFT));
lineaDeEstado.setBackground(Color.lightGray);
Label ventanaDeeventos = new Label("Gestor AEMET v1.0 (PAA)");
lineaDeEstado.add(ventanaDeeventos);
return lineaDeEstado;
}

private void guardarAntesDeSalir() {

// Guardar almacen
almacen.guardar(FICHERO);
System.out.println("Gracias por utilizar nuestro programa");
}

class Controller implements ActionListener {

public void actionPerformed(ActionEvent e) {
String nombre = e.getActionCommand();
EvaluarAccion(nombre);
}

public void EvaluarAccion(String accion) {

switch (accion) {
case "Guardar":
almacen.guardar(FICHERO);
Aviso guardar = new Aviso(gui, "Archivo guardado");
break;
case "Salir":
System.exit(0);
break;
case "Crear provincia":
new VentanaCrearProvincia(gui,almacen,listaPoblaciones,listaProvincias,listaPredicciones).setVisible(true);
break;
case "Borrar provincia":
new VentanaBorrarProvincia(gui,almacen,listaPoblaciones,listaProvincias,listaPredicciones).setVisible(true);
break;
case "Crear poblacion":
new VentanaCrearPoblacion(gui,almacen,listaPoblaciones,listaProvincias,listaPredicciones).setVisible(true);
break;
case "Borrar poblacion":
new VentanaBorrarPoblacion(gui,almacen,listaPoblaciones,listaProvincias,listaPredicciones).setVisible(true);
break;
case "Ordenar por nombre":
break;
case "Ordenar por habitantes":
break;
case "Modificar poblacion":
break;
case "Mover poblacion":
break;
}
}
}

/**
* Clase que implementa la acción del menú "acerca de".
*/
class AcercaDe implements ActionListener { // Clase interna
public void actionPerformed(ActionEvent e) {
VentanaAcercaDe ventanaAcercaDe = new VentanaAcercaDe(
InterfazAWT_AEMET.this);
ventanaAcercaDe.setVisible(true);
}
}// Acerca de

/**
* Método main.
* @throws GestorAEMETException
*/
public static void main(String[] args) throws GestorAEMETException {

InterfazAWT_AEMET mimarco = new InterfazAWT_AEMET("Gestor AEMET", 1000,
500);
mimarco.setVisible(true);
} // Main
}


y esta la que se encarga de crear poblacion:

Código (java) [Seleccionar]
package Poblacion;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import principal.AlmacenPoblaciones;
import principal.Aviso;

public class VentanaCrearPoblacion extends Dialog {

private Button crear;
private Button cancelar;
private AlmacenPoblaciones almacen;
private List listaPoblaciones;
private List listaPredicciones;
private List listaProvincias;
private TextField textField;
private static final long serialVersionUID = 1434307119439314094L;

public VentanaCrearPoblacion(Frame gui, AlmacenPoblaciones almacen, List listaPoblaciones, List listaProvincias, List listaPredicciones) {
super(gui);
initComponents(gui);
this.almacen = almacen;
this.listaPoblaciones = listaPoblaciones;
this.listaProvincias = listaProvincias;
this.listaPredicciones = listaPredicciones;
}
public void initComponents(Frame gui){
setLocationRelativeTo(gui);
this.setLayout(new BorderLayout());
this.setTitle("Crear Poblacion");
this.setSize(300, 200);
Panel texto = new Panel(new GridLayout(4,1,0,0));
Panel panel = new Panel(new FlowLayout());
crear = new Button("Crear");
cancelar = new Button("Cancelar");
textField = new TextField("Nombre");
Label nombreP = new Label();
String textoProvincia = listaProvincias.getSelectedItem();
System.out.println(textoProvincia);
nombreP.setText("");
TextField habitantes = new TextField("Habitantes");
TextField codigo = new TextField("CodigoAEMET");
crear.addActionListener(new Controller());
cancelar.addActionListener(new Controller());

texto.add(textField);
texto.add(nombreP);
texto.add(habitantes);
texto.add(codigo);
panel.add(crear);
panel.add(cancelar);

this.add(texto, BorderLayout.CENTER);
this.add(panel,BorderLayout.SOUTH);

addWindowListener (new WindowAdapter (){
          public void windowClosing(WindowEvent e) {
          VentanaCrearPoblacion.this.dispose();
             }
          });
}
class Controller implements ActionListener {
private VentanaCrearPoblacion gui;
public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand();
if(label.equals("Crear")){
System.out.println("hola");
try{

}catch (IllegalArgumentException e1){
Aviso aviso = new Aviso(gui,e1.getMessage());
}
}else{
VentanaCrearPoblacion.this.dispose();
}
}
}
void listChange(ItemEvent ev) {
        if((ev.getItem()).equals("Desayuno")){

        }
    }

}


este es el error que genera:

Código (java) [Seleccionar]
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Poblacion.VentanaCrearPoblacion.initComponents(VentanaCrearPoblacion.java:51)
at Poblacion.VentanaCrearPoblacion.<init>(VentanaCrearPoblacion.java:34)
at principal.InterfazAWT_AEMET$Controller.EvaluarAccion(InterfazAWT_AEMET.java:231)
at principal.InterfazAWT_AEMET$Controller.actionPerformed(InterfazAWT_AEMET.java:211)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Usuario Invitado

El error es porque listaProvincias aún está null, ya que el método initComponents es ejecutado antes que se establezcan las propiedades con los valores de los parámetros.

El constructor debería ser así:

Código (java) [Seleccionar]
public VentanaCrearPoblacion(Frame gui, AlmacenPoblaciones almacen,
   List listaPoblaciones, List listaProvincias, List listaPredicciones) {
   super(gui);
   this.almacen = almacen;
   this.listaPoblaciones = listaPoblaciones;
   this.listaProvincias = listaProvincias;
   this.listaPredicciones = listaPredicciones;
   initComponents(gui);
}



Saludos.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

Usuario Invitado

Perdón por el doble post, pero creo que así hay más probabilidades que el autor del tema me lea a que edite mi respuesta anterior.

Creo que ya es hora de cerrar éste tema, se ha desvirtuado mucho. Cualquier nueva duda kikian94, por favor abrirla en un nuevo tema. No olvides marcar este tema como solucionado.


Saludos.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

kikian94

si, tienes toda la razon, ya he conseguido solucionar el error, era por lo que decias :), muchas gracias por todo,que paciencia has tenido jeje