elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Meter un Frame dentro de otro Frame
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Meter un Frame dentro de otro Frame  (Leído 18,523 veces)
kikian94

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #10 en: 16 Marzo 2015, 18:10 pm »

esta practica la tenemos que hacer en awt para familiarizarnos y la siguiente es pasar esta a swing, voy a mirar ahora lo que me has puesto ya que lo he mirado por encima y me ha resuelto varias dudas, muchas gracias :)


En línea

kikian94

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #11 en: 16 Marzo 2015, 18:15 pm »

una cosa, yo en mi constructor creo todo el frame con todos los botones, por que tu solo pones esto:
Código
  1. public MainWindow() {
  2. super();
  3. controller = new MainWindowController(this);
  4. initComponents();
  5. }


En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #12 en: 16 Marzo 2015, 18:40 pm »

Buenas tardes,

La razón de ello es porque estoy usando el patrón MVC como ya dije en mi respuesta anterior. El patrón MVC consiste en dividir tu aplicación en 3 capas:

  • Modelo: Aquí estará toda la lógica de tu aplicación. Entidades y todo tipo de objetos que colaboran entre sí para cumplir con las reglas del negocio.
  • Vista: Esta capa solo contiene las vistas (sean HTML, Frame, JFrame, Stage de JavaFX, WinForms, etc).
  • Controlador: Esta capa es la que está entre la Vista y el Modelo. El controlador detecta la acción que ha elegido el usuario y de acuerdo a ello se dirige al modelo para realizar el proceso demandado o también puede acceder a la Vista para devolver una nueva vista. Por ejemplo, cuando registras algo y se muestra una ventana para los datos.


Una vez entendidos éstos conceptos podrás entender el código que te he puesto. De todas maneras, te explicaré cómo funciona.

MainWindowController

Esta es una clase que actúa como controlador, en concreto, es controlador de la vista MainWindow (JFrame). Como se puede observar en su constructor, recibe como parámetro una instancia de MainWindow para que pueda manejar a ella.

Código
  1. public MainWindowController(MainWindow gui) {
  2.    this.gui = gui;
  3. }

Al recibir éste controlador una referencia de la vista MainWindow, la puede manejar desde aquí y ya no tenemos que mezclar la lógica de negocio con las vistas. Esto es sumamente importante en el desarrollo de software. El software debe ser fácil de mantener, por que el software una vez que se termina no es todo, siempre se seguirá manteniendo, actualizando, corrigiendo bugs, etc.

La referencia se la pasamos desde la vista MainWindow con el uso de this. this es una palabra reservada que hace referencia a "la clase donde se encuentra", por lo que, al pasarle al hacer:

Código
  1. new MainWindowController(this);

Lo que hacemos es pasarle la referencia de esa clase, MainWindow, a MainWindowController. De ésta manera, desacoplamos la aplicación, haciéndola mucho más modular y fácil de entender y mantener.

Es importante aclarar que para acceder a los controles de la vista (botones, tablas, etc), vas a tener que:

  • Hacer todos los controles public (mala idea).
  • Hacer getters/setters para los controles.

La decisión para dejar los controles private y hacer los getters/setters para acceder a ellos es un concepto de Programación orientada a objetos, y se llama Encapsulamiento, que consiste en aislar las propiedades de un objeto para el exterior, con el propósito de protegerlas y ocultarlas al resto de objetos. sobre esto, ya entenderás más adelante (aunque ya deberías si ya estás por aplicaciones gráficas).
« Última modificación: 16 Marzo 2015, 18:42 pm por Gus Garsaky » En línea

"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

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #13 en: 16 Marzo 2015, 19:17 pm »

tienes que crear una clase nueva para cada evento o los puedes poner como clases propias?
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #14 en: 16 Marzo 2015, 19:33 pm »

¿Una clase para cada evento?. Una clase puede implementar un número ilimitado de interfaces, por lo que tus controladores, por ejemplo el controlador MainWindowController que implementa ActionListener, puede implementar también KeyListener entre otras.
En línea

"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

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #15 en: 17 Marzo 2015, 10:06 am »

he modificado el codigo para hacerlo por modulos:


interfaz principal
Código
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.io.*;
  4. import java.util.Date;
  5. import java.text.SimpleDateFormat;
  6.  
  7. import paa.provincias.GestorAEMET;
  8. import paa.provincias.GestorAEMETException;
  9.  
  10. /**
  11.  * Fichero: InterfazAWT_AEMET.java
  12.  * Clase que implementa la Interfaz Gráfica AEMET con awt.
  13.  * @author  PAA
  14.  * @version 1.0
  15.  */
  16. public class InterfazAWT_AEMET extends Frame {
  17. /**
  18. *
  19. */
  20. private static final long serialVersionUID = 502635761186556414L;
  21.  
  22. private static final String FICHERO = "almacen.dat";
  23.  
  24.  
  25. // private IAlmacenPoblaciones almacenPoblaciones;
  26. // private List listaPoblaciones;
  27. // private List listaPredicciones;
  28.  
  29. /**
  30. * Constructor.
  31. */
  32. public InterfazAWT_AEMET(String titulo, int ancho, int alto){
  33. super(titulo);
  34. setSize(ancho,alto);
  35. setLocationRelativeTo(null);
  36. setLayout( new BorderLayout() ); // Layout de la aplicación, podría ser otro
  37. initComponents();
  38.  
  39. }//Constructor
  40. //List<IPrediccion> lista = null;
  41.  
  42.  
  43. /*try {
  44. lista = gestor.getPredicciones( poblacion );
  45. poblacion.lista = lista;
  46. } catch( GestorAEMETException gae ) {
  47. System.out.println( gae.getMessage() );
  48. }*/
  49.  
  50. private void initComponents(){
  51.  
  52. // Recuperamos el almacén
  53. AlmacenPoblaciones almacenPoblaciones = new AlmacenPoblaciones();
  54. if (almacenPoblaciones.recuperar(FICHERO))
  55. System.out.println("Recuperado el almacen del fichero " + FICHERO);
  56. else
  57. System.out.println("No se pudo recuperar el almacen del fichero " + FICHERO);
  58. //Boton salir por defecto
  59. addWindowListener (new WindowAdapter () {
  60.          public void windowClosing(WindowEvent e) {
  61.          guardarAntesDeSalir ();
  62.              System.exit(0);
  63.             }
  64.    });
  65.  
  66. setMenuBar(addMenuBar());
  67. this.add (addToolBar(),BorderLayout.NORTH);
  68. this.add (addlineaEstado(), BorderLayout.SOUTH);
  69. this.add (addPanelIzquierda(), BorderLayout.WEST);
  70. this.add (addpredicciones(), BorderLayout.CENTER);
  71. }
  72.  
  73.  
  74. private MenuBar addMenuBar(){
  75. //Sitúo los menús desplegables
  76. MenuBar barraDeMenu = new MenuBar();
  77.  
  78. // Creo el menú Archivo
  79. Menu menuArchivo = new Menu("Archivo");
  80. MenuItem crearGuardar = new MenuItem ("Guardar");
  81. MenuItem crearCargar = new MenuItem ("Cargar");
  82. MenuItem salir = new MenuItem ("Salir");
  83. crearCargar.addActionListener(new CargarArchivo());
  84. crearGuardar.addActionListener(new GuardarArchivo());
  85. salir.addActionListener(new Salir());
  86. menuArchivo.add(crearCargar);
  87. menuArchivo.add(crearGuardar);
  88. menuArchivo.add(salir);
  89.  
  90. // Creo el menú Provincias
  91. Menu menuProvincias = new Menu("Provincias");
  92. MenuItem crearProvincias = new MenuItem ("Crear provincia");
  93. MenuItem borrarProvincias = new MenuItem ("Borrar provincia");
  94. crearProvincias.addActionListener(new CrearProvincia());
  95. borrarProvincias.addActionListener(new BorrarProvincia());
  96. menuProvincias.add(crearProvincias);
  97. menuProvincias.add(borrarProvincias);
  98.  
  99. // Creo el menu Poblaciones
  100. Menu menuPoblaciones = new Menu("Poblaciones");
  101. MenuItem crearPoblacion = new MenuItem ("Crear poblacion");
  102. MenuItem borrarPoblacion = new MenuItem ("Borrar poblacion");
  103. MenuItem ordenarNombre = new MenuItem ("Ordenar por nombre");
  104. MenuItem ordenarHabitantes = new MenuItem ("Ordenar por habitantes");
  105. MenuItem modPoblacion = new MenuItem ("Modificar poblacion");
  106. MenuItem movPoblacion = new MenuItem ("Mover poblacion");
  107. crearPoblacion.addActionListener(new CrearPoblacion());
  108. borrarPoblacion.addActionListener(new BorrarPoblacion());
  109. ordenarNombre.addActionListener(new OrdenarNombre());
  110. ordenarHabitantes.addActionListener(new OrdenarHabitantes());
  111. modPoblacion.addActionListener(new ModPoblacion());
  112. movPoblacion.addActionListener(new MovPoblacion());
  113. menuPoblaciones.add(crearPoblacion);
  114. menuPoblaciones.add(borrarPoblacion);
  115. menuPoblaciones.add(ordenarNombre);
  116. menuPoblaciones.add(ordenarHabitantes);
  117. menuPoblaciones.add(modPoblacion);
  118. menuPoblaciones.add(movPoblacion);
  119.  
  120. // Creo el menú de ayuda
  121. Menu ayuda = new Menu("Ayuda");
  122. MenuItem acercaDe = new MenuItem("Acerca de");
  123. acercaDe.addActionListener(new AcercaDe());
  124. ayuda.add(acercaDe);
  125.  
  126. //Crea el
  127. barraDeMenu.add(menuArchivo);
  128. barraDeMenu.add(menuProvincias);
  129. barraDeMenu.add(menuPoblaciones);
  130. // Sitúo el menú de ayuda en su sitio
  131. barraDeMenu.setHelpMenu(ayuda);
  132. return barraDeMenu;
  133. }
  134.  
  135. private Panel addToolBar(){
  136. //Sitúo la línea de botones
  137. Panel lineaDeBotones = new Panel(new FlowLayout (FlowLayout.LEFT));
  138. lineaDeBotones.setBackground (Color.lightGray);
  139.  
  140. //Boton crear provincia
  141. Button proCrear = new Button("Crear provincia");
  142. proCrear.addActionListener(new CrearProvincia());
  143.  
  144. //Boton crear poblacion
  145. Button poCrear = new Button("Crear Población");
  146. poCrear.addActionListener(new CrearPoblacion());
  147.  
  148. //Boton actualizar prediccion
  149. Button aPrediccion = new Button("Actualizar Predicción");
  150. aPrediccion.addActionListener(new ActualizarPrediccion());
  151.  
  152. // Añadir los botones a la barra
  153. lineaDeBotones.add(proCrear);
  154. lineaDeBotones.add(poCrear);
  155. lineaDeBotones.add(aPrediccion);
  156. return lineaDeBotones;
  157. }
  158.  
  159. private Panel addPanelIzquierda(){
  160. //Creamos  panel para mostrar provincias y poblaciones y lo colocamos a la izquierda
  161. Panel izquierda = new Panel(new GridLayout(4,1));
  162.  
  163. Label lProvincia = new Label("Provincias:");
  164. List tProvincias = new List();
  165.  
  166. Label lPoblacion = new Label("Poblaciones:");
  167. List tPoblaciones = new List();
  168.  
  169. izquierda.add(lProvincia);
  170. izquierda.add(tProvincias);
  171. izquierda.add(lPoblacion);
  172. izquierda.add(tPoblaciones);
  173. return izquierda;
  174. }
  175.  
  176. private Panel addpredicciones(){
  177. //Creamos el panel de las predicciones
  178. Panel predicciones = new Panel(new BorderLayout());
  179. Label lPrediccion = new Label("Predicciones de :");
  180. List tPrediccion = new List();
  181. predicciones.add(lPrediccion,BorderLayout.NORTH);
  182. predicciones.add(tPrediccion,BorderLayout.CENTER);
  183. return predicciones;
  184. }
  185.  
  186. private Panel addlineaEstado(){
  187. //Sitúo la línea de estado
  188. Panel lineaDeEstado = new Panel();
  189. lineaDeEstado.setLayout (new FlowLayout (FlowLayout.LEFT));
  190. lineaDeEstado.setBackground (Color.lightGray);
  191. Label ventanaDeeventos = new Label("Gestor AEMET v1.0 (PAA)");
  192. lineaDeEstado.add (ventanaDeeventos);
  193. return lineaDeEstado;
  194. }
  195.  
  196. private void guardarAntesDeSalir () {
  197.  
  198. // Guardar almacen
  199. System.out.println ("Gracias por utilizar nuestro programa");
  200. }
  201.  
  202.  
  203. /**
  204. * Clase que implementa la acción del menú "acerca de".
  205. */
  206. class AcercaDe implements ActionListener{  // Clase interna
  207. public void actionPerformed(ActionEvent e){
  208. VentanaAcercaDe ventanaAcercaDe = new VentanaAcercaDe(InterfazAWT_AEMET.this);
  209. ventanaAcercaDe.setVisible(true);
  210. }
  211. }//Acerca de
  212.  
  213.  
  214. //****Acciones menu archivo****
  215. class GuardarArchivo implements ActionListener {
  216. public void actionPerformed(ActionEvent e) {
  217.  
  218. }
  219. }//Guardar en un fichero
  220.  
  221. class CargarArchivo implements ActionListener {
  222. public void actionPerformed(ActionEvent e) {
  223.  
  224. }
  225. }//Cargar desde un archivo
  226.  
  227. class Salir implements ActionListener {
  228. public void actionPerformed(ActionEvent e) {
  229.  
  230. }
  231. }//Salir de la aplicacion
  232.  
  233.  
  234. //****Acciones menu provincia****
  235. // Crea una provincia
  236. class CrearProvincia implements ActionListener {
  237.  public void actionPerformed(ActionEvent e) {
  238. e.getActionCommand();
  239.  
  240. }
  241. }
  242.  
  243. class VentanaCrearProvincia implements ActionListener {
  244. public void actionPerformed(ActionEvent e) {
  245. VentanaCrearProvincia dialog = new VentanaCrearProvincia();
  246. dialog.setVisible(true);
  247. }
  248.  
  249. }
  250.  
  251. //Elimina una provincia
  252. class BorrarProvincia implements ActionListener {
  253. public void actionPerformed(ActionEvent e) {
  254. Aviso aviso = new Aviso(InterfazAWT_AEMET.this,"Provincia:");
  255. aviso.setLayout(new GridLayout(2,2,0,0));
  256. aviso.setTitle("Eliminar Provincia");
  257. aviso.setSize(300, 100);
  258. TextField textField = new TextField();
  259. Button eliminar = new Button("Eliminar");
  260. Button cancelar = new Button("Cancelar");
  261. aviso.add(textField);
  262. aviso.add(eliminar);
  263. aviso.add(cancelar);
  264.  
  265. aviso.setVisible(true);
  266.  
  267.  
  268. }
  269. }
  270.  
  271.  
  272.  
  273.  
  274. //****Acciones menu poblacion****
  275. //Crear una poblacion
  276. class CrearPoblacion implements ActionListener {
  277. public void actionPerformed(ActionEvent e) {
  278. //Aviso aviso = new Aviso(InterfazAWT_AEMET.this,"Nueva provincia");
  279. Aviso dialog = new Aviso(InterfazAWT_AEMET.this);
  280. dialog.setLayout(new BorderLayout());
  281. dialog.setSize(300, 400);
  282. Panel texto = new Panel(new GridLayout(4,1,0,0));
  283. Panel panel = new Panel(new FlowLayout());
  284. Button crear = new Button("Crear");
  285. Button cancelar = new Button("Cancelar");
  286. TextField nombre = new TextField("Nombre");
  287. Label nombreP = new Label("Nombre Provincia");
  288. TextField habitantes = new TextField("Habitantes");
  289. TextField codigo = new TextField("CodigoAEMET");
  290.  
  291. texto.add(nombre);
  292. texto.add(nombreP);
  293. texto.add(habitantes);
  294. texto.add(codigo);
  295. panel.add(crear);
  296. panel.add(cancelar);
  297.  
  298. dialog.add(texto, BorderLayout.CENTER);
  299. dialog.add(panel,BorderLayout.SOUTH);
  300. dialog.pack();
  301. dialog.setVisible(true);
  302.  
  303.  
  304.  
  305. }
  306.  
  307. }
  308.  
  309. //Eliminar una poblacion
  310. class BorrarPoblacion implements ActionListener {
  311. public void actionPerformed(ActionEvent e) {
  312. Aviso aviso = new Aviso(InterfazAWT_AEMET.this,"Poblacion:");
  313. aviso.setLayout(new GridLayout(2,2,0,0));
  314. aviso.setTitle("Eliminar Poblacion");
  315. aviso.setSize(300, 100);
  316. TextField textField = new TextField();
  317. Button eliminar = new Button("Eliminar");
  318. Button cancelar = new Button("Cancelar");
  319. aviso.add(textField);
  320. aviso.add(eliminar);
  321. aviso.add(cancelar);
  322.  
  323. aviso.setVisible(true);
  324. }
  325. }
  326.  
  327. //Ordena por nombre las poblaciones
  328. class OrdenarNombre implements ActionListener {
  329. public void actionPerformed(ActionEvent e) {
  330.  
  331. }
  332. }
  333.  
  334. //Ordena por numero de habitantes las poblaciones
  335. class OrdenarHabitantes implements ActionListener {
  336. public void actionPerformed(ActionEvent e) {
  337.  
  338. }
  339. }
  340.  
  341. //Modifica los valores de una poblacion
  342. class ModPoblacion implements ActionListener {
  343. public void actionPerformed(ActionEvent e) {
  344.  
  345. }
  346. }
  347.  
  348. //Mueve una poblacion de provincia
  349. class MovPoblacion implements ActionListener {
  350. public void actionPerformed(ActionEvent e) {
  351.  
  352. }
  353. }
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361. //Accion actualizar prediccion
  362. class ActualizarPrediccion implements ActionListener {
  363. public void actionPerformed(ActionEvent e) {
  364.  
  365. }
  366. }
  367.  
  368. /**
  369. * Método main.
  370. */
  371. public static void main(String[] args) {
  372.  
  373. InterfazAWT_AEMET mimarco = new InterfazAWT_AEMET("Gestor AEMET",1000,500);
  374. mimarco.setVisible(true);
  375. } // Main
  376. }
  377.  


ventana crear provincia
Código
  1. import java.awt.Button;
  2. import java.awt.Dialog;
  3. import java.awt.Frame;
  4. import java.awt.GridLayout;
  5. import java.awt.TextField;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.awt.event.WindowAdapter;
  9. import java.awt.event.WindowEvent;
  10.  
  11.  
  12. public class VentanaCrearProvincia extends Dialog {
  13.  
  14. /**
  15. *
  16. */
  17. private static final long serialVersionUID = -2530069431684593677L;
  18. public VentanaCrearProvincia(Frame f) {
  19. super(f,"Nueva provincia",true);
  20. setLocationRelativeTo(f);
  21.  
  22. this.setLayout(new GridLayout(2,2,0,0));
  23. this.setTitle("Crear Provincia");
  24. this.setSize(300, 100);
  25. TextField textField = new TextField();
  26. Button crear = new Button("Crear");
  27. Button cancelar = new Button("Cancelar");
  28. crear.addActionListener(new BotonCrear());
  29. cancelar.addActionListener(new BotonCancelar());
  30. this.add(textField);
  31. this.add(crear);
  32. this.add(cancelar);
  33.  
  34. addWindowListener (new WindowAdapter (){
  35.          public void windowClosing(WindowEvent e) {
  36.          VentanaCrearProvincia.this.dispose();
  37.             }
  38.          });
  39. }
  40.  
  41. class BotonCrear implements ActionListener{
  42.  
  43. @Override
  44. public void actionPerformed(ActionEvent e) {
  45. // TODO Auto-generated method stub
  46.  
  47. }
  48.  
  49. }
  50.  
  51. class BotonCancelar implements ActionListener{
  52.  
  53. @Override
  54. public void actionPerformed(ActionEvent e) {
  55. System.exit(0);
  56.  
  57. }
  58.  
  59. }
  60.  
  61. }
  62.  

pero tengo varios errores en el metodo initcomponents:

Código
  1. java.io.FileNotFoundException: almacen.dat (El sistema no puede encontrar el archivo especificado)
  2. at java.io.FileInputStream.open(Native Method)
  3. at java.io.FileInputStream.<init>(Unknown Source)
  4. at java.io.FileInputStream.<init>(Unknown Source)
  5. at AlmacenPoblaciones.recuperar(AlmacenPoblaciones.java:357)
  6. at InterfazAWT_AEMET.initComponents(InterfazAWT_AEMET.java:54)
  7. at InterfazAWT_AEMET.<init>(InterfazAWT_AEMET.java:37)
  8. at InterfazAWT_AEMET.main(InterfazAWT_AEMET.java:373)

lo de que no encuentra el archivo, es por que no lo tengo creado, ese no me preocupa de momento, se abre la ventana principal pero al pulsar en crear provincia no sale la siguiente ventana
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #16 en: 17 Marzo 2015, 17:31 pm »

Me has mal entendido. Eso no es modular, eso es repetitivo y viola el principio KISS (Keep it simple stupid). Ya te di las pautas para que lo hagas correctamente, depende de ti si las usas o no.

Código
  1. class VentanaCrearProvincia implements ActionListener {
  2.  
  3. 244. public void actionPerformed(ActionEvent e) {
  4.  
  5. 245. VentanaCrearProvincia dialog = new VentanaCrearProvincia();
  6.  
  7. 246. dialog.setVisible(true);
  8.  
  9. 247. }
  10.  
  11. 248.
  12.  
  13. 249. }

¿La clase VentanaCrearProvincia no aceptaba un Frame en el constructor para utilizarlo como padre?
En línea

"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

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #17 en: 18 Marzo 2015, 18:24 pm »

vale, ya he conseguido que me funcione, mira:

clase principal

Código
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.io.*;
  4. import java.util.Date;
  5. import java.text.SimpleDateFormat;
  6.  
  7. import paa.provincias.GestorAEMET;
  8. import paa.provincias.GestorAEMETException;
  9.  
  10. /**
  11.  * Fichero: InterfazAWT_AEMET.java
  12.  * Clase que implementa la Interfaz Gráfica AEMET con awt.
  13.  * @author  PAA
  14.  * @version 1.0
  15.  */
  16. public class InterfazAWT_AEMET extends Frame {
  17. /**
  18. *
  19. */
  20. private static final long serialVersionUID = 502635761186556414L;
  21.  
  22. private static final String FICHERO = "almacen.dat";
  23. private VentanaCrearProvinciaController controllerCrearProvincia;
  24.  
  25. // private IAlmacenPoblaciones almacenPoblaciones;
  26. // private List listaPoblaciones;
  27. // private List listaPredicciones;
  28.  
  29. /**
  30. * Constructor.
  31. */
  32. public InterfazAWT_AEMET(String titulo, int ancho, int alto){
  33. super(titulo);
  34. controllerCrearProvincia = new VentanaCrearProvinciaController(this);
  35. setSize(ancho,alto);
  36. setLocationRelativeTo(null);
  37. setLayout( new BorderLayout() ); // Layout de la aplicación, podría ser otro
  38. initComponents();
  39.  
  40. }//Constructor
  41. //List<IPrediccion> lista = null;
  42.  
  43.  
  44. /*try {
  45. lista = gestor.getPredicciones( poblacion );
  46. poblacion.lista = lista;
  47. } catch( GestorAEMETException gae ) {
  48. System.out.println( gae.getMessage() );
  49. }*/
  50.  
  51. private void initComponents(){
  52.  
  53. // Recuperamos el almacén
  54. AlmacenPoblaciones almacenPoblaciones = new AlmacenPoblaciones();
  55. if (almacenPoblaciones.recuperar(FICHERO))
  56. System.out.println("Recuperado el almacen del fichero " + FICHERO);
  57. else
  58. System.out.println("No se pudo recuperar el almacen del fichero " + FICHERO);
  59. //Boton salir por defecto
  60. addWindowListener (new WindowAdapter () {
  61.          public void windowClosing(WindowEvent e) {
  62.          guardarAntesDeSalir ();
  63.              System.exit(0);
  64.             }
  65.    });
  66.  
  67. setMenuBar(addMenuBar());
  68. this.add (addToolBar(),BorderLayout.NORTH);
  69. this.add (addlineaEstado(), BorderLayout.SOUTH);
  70. this.add (addPanelIzquierda(), BorderLayout.WEST);
  71. this.add (addpredicciones(), BorderLayout.CENTER);
  72. }
  73.  
  74.  
  75. private MenuBar addMenuBar(){
  76. //Sitúo los menús desplegables
  77. MenuBar barraDeMenu = new MenuBar();
  78.  
  79. // Creo el menú Archivo
  80. Menu menuArchivo = new Menu("Archivo");
  81. MenuItem crearGuardar = new MenuItem ("Guardar");
  82. MenuItem crearCargar = new MenuItem ("Cargar");
  83. MenuItem salir = new MenuItem ("Salir");
  84. crearCargar.addActionListener(new CargarArchivo());
  85. crearGuardar.addActionListener(new GuardarArchivo());
  86. salir.addActionListener(new Salir());
  87. menuArchivo.add(crearCargar);
  88. menuArchivo.add(crearGuardar);
  89. menuArchivo.add(salir);
  90.  
  91. // Creo el menú Provincias
  92. Menu menuProvincias = new Menu("Provincias");
  93. MenuItem crearProvincias = new MenuItem ("Crear provincia");
  94. MenuItem borrarProvincias = new MenuItem ("Borrar provincia");
  95. crearProvincias.addActionListener(controllerCrearProvincia);
  96. borrarProvincias.addActionListener(new BorrarProvincia());
  97. menuProvincias.add(crearProvincias);
  98. menuProvincias.add(borrarProvincias);
  99.  
  100. // Creo el menu Poblaciones
  101. Menu menuPoblaciones = new Menu("Poblaciones");
  102. MenuItem crearPoblacion = new MenuItem ("Crear poblacion");
  103. MenuItem borrarPoblacion = new MenuItem ("Borrar poblacion");
  104. MenuItem ordenarNombre = new MenuItem ("Ordenar por nombre");
  105. MenuItem ordenarHabitantes = new MenuItem ("Ordenar por habitantes");
  106. MenuItem modPoblacion = new MenuItem ("Modificar poblacion");
  107. MenuItem movPoblacion = new MenuItem ("Mover poblacion");
  108. crearPoblacion.addActionListener(new CrearPoblacion());
  109. borrarPoblacion.addActionListener(new BorrarPoblacion());
  110. ordenarNombre.addActionListener(new OrdenarNombre());
  111. ordenarHabitantes.addActionListener(new OrdenarHabitantes());
  112. modPoblacion.addActionListener(new ModPoblacion());
  113. movPoblacion.addActionListener(new MovPoblacion());
  114. menuPoblaciones.add(crearPoblacion);
  115. menuPoblaciones.add(borrarPoblacion);
  116. menuPoblaciones.add(ordenarNombre);
  117. menuPoblaciones.add(ordenarHabitantes);
  118. menuPoblaciones.add(modPoblacion);
  119. menuPoblaciones.add(movPoblacion);
  120.  
  121. // Creo el menú de ayuda
  122. Menu ayuda = new Menu("Ayuda");
  123. MenuItem acercaDe = new MenuItem("Acerca de");
  124. acercaDe.addActionListener(new AcercaDe());
  125. ayuda.add(acercaDe);
  126.  
  127. //Crea el
  128. barraDeMenu.add(menuArchivo);
  129. barraDeMenu.add(menuProvincias);
  130. barraDeMenu.add(menuPoblaciones);
  131. // Sitúo el menú de ayuda en su sitio
  132. barraDeMenu.setHelpMenu(ayuda);
  133. return barraDeMenu;
  134. }
  135.  
  136. private Panel addToolBar(){
  137. //Sitúo la línea de botones
  138. Panel lineaDeBotones = new Panel(new FlowLayout (FlowLayout.LEFT));
  139. lineaDeBotones.setBackground (Color.lightGray);
  140.  
  141. //Boton crear provincia
  142. Button proCrear = new Button("Crear provincia");
  143. proCrear.addActionListener(controllerCrearProvincia);
  144.  
  145. //Boton crear poblacion
  146. Button poCrear = new Button("Crear Población");
  147. poCrear.addActionListener(new CrearPoblacion());
  148.  
  149. //Boton actualizar prediccion
  150. Button aPrediccion = new Button("Actualizar Predicción");
  151. aPrediccion.addActionListener(new ActualizarPrediccion());
  152.  
  153. // Añadir los botones a la barra
  154. lineaDeBotones.add(proCrear);
  155. lineaDeBotones.add(poCrear);
  156. lineaDeBotones.add(aPrediccion);
  157. return lineaDeBotones;
  158. }
  159.  
  160. private Panel addPanelIzquierda(){
  161. //Creamos  panel para mostrar provincias y poblaciones y lo colocamos a la izquierda
  162. Panel izquierda = new Panel(new GridLayout(4,1));
  163.  
  164. Label lProvincia = new Label("Provincias:");
  165. List tProvincias = new List();
  166.  
  167. Label lPoblacion = new Label("Poblaciones:");
  168. List tPoblaciones = new List();
  169.  
  170. izquierda.add(lProvincia);
  171. izquierda.add(tProvincias);
  172. izquierda.add(lPoblacion);
  173. izquierda.add(tPoblaciones);
  174. return izquierda;
  175. }
  176.  
  177. private Panel addpredicciones(){
  178. //Creamos el panel de las predicciones
  179. Panel predicciones = new Panel(new BorderLayout());
  180. Label lPrediccion = new Label("Predicciones de :");
  181. List tPrediccion = new List();
  182. predicciones.add(lPrediccion,BorderLayout.NORTH);
  183. predicciones.add(tPrediccion,BorderLayout.CENTER);
  184. return predicciones;
  185. }
  186.  
  187. private Panel addlineaEstado(){
  188. //Sitúo la línea de estado
  189. Panel lineaDeEstado = new Panel();
  190. lineaDeEstado.setLayout (new FlowLayout (FlowLayout.LEFT));
  191. lineaDeEstado.setBackground (Color.lightGray);
  192. Label ventanaDeeventos = new Label("Gestor AEMET v1.0 (PAA)");
  193. lineaDeEstado.add (ventanaDeeventos);
  194. return lineaDeEstado;
  195. }
  196.  
  197. private void guardarAntesDeSalir () {
  198.  
  199. // Guardar almacen
  200. System.out.println ("Gracias por utilizar nuestro programa");
  201. }
  202.  
  203.  
  204. /**
  205. * Clase que implementa la acción del menú "acerca de".
  206. */
  207. class AcercaDe implements ActionListener{  // Clase interna
  208. public void actionPerformed(ActionEvent e){
  209. VentanaAcercaDe ventanaAcercaDe = new VentanaAcercaDe(InterfazAWT_AEMET.this);
  210. ventanaAcercaDe.setVisible(true);
  211. }
  212. }//Acerca de
  213.  
  214.  
  215. //****Acciones menu archivo****
  216. class GuardarArchivo implements ActionListener {
  217. public void actionPerformed(ActionEvent e) {
  218.  
  219. }
  220. }//Guardar en un fichero
  221.  
  222. class CargarArchivo implements ActionListener {
  223. public void actionPerformed(ActionEvent e) {
  224.  
  225. }
  226. }//Cargar desde un archivo
  227.  
  228. class Salir implements ActionListener {
  229. public void actionPerformed(ActionEvent e) {
  230.  
  231. }
  232. }//Salir de la aplicacion
  233.  
  234.  
  235. //****Acciones menu provincia****
  236. // Crea una provincia
  237. class CrearProvincia implements ActionListener {
  238.  public void actionPerformed(ActionEvent e) {
  239. e.getActionCommand();
  240.  
  241. }
  242. }
  243.  
  244.  
  245.  
  246. //Elimina una provincia
  247. class BorrarProvincia implements ActionListener {
  248. public void actionPerformed(ActionEvent e) {
  249. Aviso aviso = new Aviso(InterfazAWT_AEMET.this,"Provincia:");
  250. aviso.setLayout(new GridLayout(2,2,0,0));
  251. aviso.setTitle("Eliminar Provincia");
  252. aviso.setSize(300, 100);
  253. TextField textField = new TextField();
  254. Button eliminar = new Button("Eliminar");
  255. Button cancelar = new Button("Cancelar");
  256. aviso.add(textField);
  257. aviso.add(eliminar);
  258. aviso.add(cancelar);
  259.  
  260. aviso.setVisible(true);
  261.  
  262.  
  263. }
  264. }
  265.  
  266.  
  267.  
  268.  
  269. //****Acciones menu poblacion****
  270. //Crear una poblacion
  271. class CrearPoblacion implements ActionListener {
  272. public void actionPerformed(ActionEvent e) {
  273. //Aviso aviso = new Aviso(InterfazAWT_AEMET.this,"Nueva provincia");
  274. Aviso dialog = new Aviso(InterfazAWT_AEMET.this);
  275. dialog.setLayout(new BorderLayout());
  276. dialog.setSize(300, 400);
  277. Panel texto = new Panel(new GridLayout(4,1,0,0));
  278. Panel panel = new Panel(new FlowLayout());
  279. Button crear = new Button("Crear");
  280. Button cancelar = new Button("Cancelar");
  281. TextField nombre = new TextField("Nombre");
  282. Label nombreP = new Label("Nombre Provincia");
  283. TextField habitantes = new TextField("Habitantes");
  284. TextField codigo = new TextField("CodigoAEMET");
  285.  
  286. texto.add(nombre);
  287. texto.add(nombreP);
  288. texto.add(habitantes);
  289. texto.add(codigo);
  290. panel.add(crear);
  291. panel.add(cancelar);
  292.  
  293. dialog.add(texto, BorderLayout.CENTER);
  294. dialog.add(panel,BorderLayout.SOUTH);
  295. dialog.pack();
  296. dialog.setVisible(true);
  297.  
  298.  
  299.  
  300. }
  301.  
  302. }
  303.  
  304. //Eliminar una poblacion
  305. class BorrarPoblacion implements ActionListener {
  306. public void actionPerformed(ActionEvent e) {
  307. Aviso aviso = new Aviso(InterfazAWT_AEMET.this,"Poblacion:");
  308. aviso.setLayout(new GridLayout(2,2,0,0));
  309. aviso.setTitle("Eliminar Poblacion");
  310. aviso.setSize(300, 100);
  311. TextField textField = new TextField();
  312. Button eliminar = new Button("Eliminar");
  313. Button cancelar = new Button("Cancelar");
  314. aviso.add(textField);
  315. aviso.add(eliminar);
  316. aviso.add(cancelar);
  317.  
  318. aviso.setVisible(true);
  319. }
  320. }
  321.  
  322. //Ordena por nombre las poblaciones
  323. class OrdenarNombre implements ActionListener {
  324. public void actionPerformed(ActionEvent e) {
  325.  
  326. }
  327. }
  328.  
  329. //Ordena por numero de habitantes las poblaciones
  330. class OrdenarHabitantes implements ActionListener {
  331. public void actionPerformed(ActionEvent e) {
  332.  
  333. }
  334. }
  335.  
  336. //Modifica los valores de una poblacion
  337. class ModPoblacion implements ActionListener {
  338. public void actionPerformed(ActionEvent e) {
  339.  
  340. }
  341. }
  342.  
  343. //Mueve una poblacion de provincia
  344. class MovPoblacion implements ActionListener {
  345. public void actionPerformed(ActionEvent e) {
  346.  
  347. }
  348. }
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356. //Accion actualizar prediccion
  357. class ActualizarPrediccion implements ActionListener {
  358. public void actionPerformed(ActionEvent e) {
  359.  
  360. }
  361. }
  362.  
  363. /**
  364. * Método main.
  365. */
  366. public static void main(String[] args) {
  367.  
  368. InterfazAWT_AEMET mimarco = new InterfazAWT_AEMET("Gestor AEMET",1000,500);
  369. mimarco.setVisible(true);
  370. } // Main
  371. }
  372.  

clase controller

Código
  1. import java.awt.event.ActionEvent;
  2. import java.awt.event.ActionListener;
  3.  
  4.  
  5. public class VentanaCrearProvinciaController implements ActionListener {
  6. private InterfazAWT_AEMET gui;
  7.  
  8. public VentanaCrearProvinciaController(InterfazAWT_AEMET gui) {
  9. this.gui = gui;
  10.  
  11. }
  12.  
  13. @Override
  14. public void actionPerformed(ActionEvent e) {
  15. if(e.getActionCommand().equals("Crear provincia")){
  16. VentanaCrearProvinciaDialog dialog = new VentanaCrearProvinciaDialog(gui);
  17. dialog.setVisible(true);
  18. }
  19.  
  20. }
  21.  
  22. }
  23.  

clase ventana provincia

Código
  1. import java.awt.Button;
  2. import java.awt.Dialog;
  3. import java.awt.Frame;
  4. import java.awt.GridLayout;
  5. import java.awt.Label;
  6. import java.awt.TextField;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.awt.event.WindowAdapter;
  10. import java.awt.event.WindowEvent;
  11.  
  12.  
  13. public class VentanaCrearProvinciaDialog extends Dialog {
  14.  
  15. /**
  16. *
  17. */
  18.  
  19. private static final long serialVersionUID = -2530069431684593677L;
  20. public VentanaCrearProvinciaDialog(Frame gui) {
  21.  
  22. super(gui);
  23. setLocationRelativeTo(gui);
  24.  
  25. this.setLayout(new GridLayout(2,2,0,0));
  26. this.setTitle("Crear Provincia");
  27. this.setSize(300, 100);
  28. Label label = new Label("Provincia");
  29. TextField textField = new TextField();
  30. Button crear = new Button("Crear");
  31. Button cancelar = new Button("Cancelar");
  32. crear.addActionListener(new BotonCrear());
  33. cancelar.addActionListener(new BotonCancelar());
  34. this.add(label);
  35. this.add(textField);
  36. this.add(crear);
  37. this.add(cancelar);
  38.  
  39. addWindowListener (new WindowAdapter (){
  40.          public void windowClosing(WindowEvent e) {
  41.          VentanaCrearProvinciaDialog.this.dispose();
  42.             }
  43.          });
  44. }
  45.  
  46. class BotonCrear implements ActionListener{
  47.  
  48. public void actionPerformed(ActionEvent e) {
  49. // TODO Auto-generated method stub
  50.  
  51. }
  52.  
  53. }
  54.  
  55. class BotonCancelar implements ActionListener{
  56. public void actionPerformed(ActionEvent e) {
  57. dispose();
  58. }
  59. }
  60.  
  61. }
  62.  

me abre la ventana de crear provincia y el boton cancelar la cierra, ahora tengo que agregar el boton crear, pero tengo una duda, he de pasarle almacenPoblaciones como parametro, pero el que debe de recibir como parametro es el metodo BotonCrear de CrearProvinciaDialog, que a su vez a de recibirlo de crearprovinciaController lo recoge de interfazAemet, por tanto quedaria asi la cosa BotonCrear(se le pasa AlmacenPoblaciones como parametro)--CrearProvinciaDialog--CrearProvinciaController--InterfazAemet, pero no se como hacer todo el recorrido.

Y otra pregunta por que en el codigo de tu clase principal el objeto controller de tipo mainWindowController lo llamas en todos los action listener, ¿por que? incluso en los de poblacion, yo solo lo he puesto en los de provincia. Muchas gracias por ayudarme, me esta siendo de gran ayuda
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #18 en: 18 Marzo 2015, 21:14 pm »

Debes de colocar un getter estático para el Map que contiene las provincias y poblaciones, de tal modo que puedes obtener el Map fácil como:

Código
  1. Map<String, Set<Population>> provinces = ProvinceService.getProvinces();

Otra opción es que ProvincesService en lugar de tener el Map como propiedad, sea el mismo un Map. Esto se logra muy fácilmente extendiendo a alguna implementación de Map:

Código
  1. public class ProvinveService extends LinkedHashMap<String, Set<Population>> {
  2.  
  3.    private static ProvinceService instance = null;
  4.    static { instance = new ProvinceService(); }
  5.  
  6.    private ProvinceService() {}
  7.  
  8.    public static ProvinceService getInstance() { return instance; }
  9.  
  10. }

Olvidemos que Singleton no sea muy recomendado. Aquí te sirve y punto. Recuerda que se usaría LinkedHashMap porque HashMap no respeta orden de inserción, cosa que sería un problema cuando haya que ordenarlo.

Los métodos como ordenar, obtenerPoblacion, etc quedarían igual. La única difefencia es que en lugar de hacer referencia al Map (que estaba como propiedad) hariamos referencia a this, porque ahora se hereda de LinkedHashMap.

Haciendo lo anterior puedes obtener el Map muy facilmente:

Código
  1. ProvinceService provinceService = ProvinceService.getInstance();
  2. provinceService.addProvince("Madrid");
  3. ...

Ademas al hacer uso de un constructor privado evitas que se creen instancias de ProvinceService por lo que te aseguras que solo exista una instancia que será compartida entre todos los objetos.

Citar
Y otra pregunta por que en el codigo de tu clase principal el objeto controller de tipo mainWindowController lo llamas en todos los action listener, ¿por que?

 ActionListener es una interface cuyo propósito es escuchar por eventos de acción (sea Enter o Clic). Al escuchar de forma general por eventos de acción puede escuchar un número ilimitado de controles cuya acción sea compatible (Button, TextField, entre otras). En mi respuesta anterior te indiqué que hacer una clase que inplemente ActionListener para cada botón no tiene ningún sentido.

MainWindowController, que implementa ActionListener escuchará todo control de MainWindow por eventos de acción: btnCreateProvince, btnCreatePopulation, btnUpdatePredictions, y todo control que sea escuchable por ActionListener.

Te preguntarás cómo identificar qué botón se ha clickeado. Bien, el objeto ActionEvent contiene información acerca del origen del desencadenamiento de la acción, origen del cual podemos saber su nombre (etiqueta del control) y de acuerdo al nombre realizar la acción deseada:

Código
  1. String targetLabel = e.getActionCommand();
  2. if(targetLabel.equals("Crear Provincia")) {
  3.    new NewProvinceDialog(gui).setVisible(true);
  4. } else if(targetLabel.equals("Nueva población")) {
  5.    new NewPopulationDialog(gui).setVisible(true);
  6. } else if(targetLabel.equals("Actualizar predicciones

En resumen:

  • El Map que contiene las provincias y poblaciones al ser un objeto único que será usado en distintos contextos debe ser estático o heredar de LinkedHashMap y ser un singleton que pueda obtenerse desde todo contexto.
  • No es necesario usar una clase que implemente a un Listener por cada control a escuchar. Es repetitivo e inútil.
« Última modificación: 18 Marzo 2015, 21:19 pm por Gus Garsaky » En línea

"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

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #19 en: 19 Marzo 2015, 13:13 pm »

lo que me has puesto de skleton es algo que no he utilizado nunca, no se como se hace por lo que la solucion tiene que ser otra ya debemos de utilizar cosas que hemos dado previamente. he pensado en esto:
Código
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.io.*;
  4. import java.util.Date;
  5. import java.util.Iterator;
  6. import java.util.LinkedHashMap;
  7. import java.util.Set;
  8. import java.text.SimpleDateFormat;
  9.  
  10. import paa.provincias.GestorAEMET;
  11. import paa.provincias.GestorAEMETException;
  12. import paa.provincias.IPoblacion;
  13.  
  14. /**
  15.  * Fichero: InterfazAWT_AEMET.java
  16.  * Clase que implementa la Interfaz Gráfica AEMET con awt.
  17.  * @author  PAA
  18.  * @version 1.0
  19.  */
  20. public class InterfazAWT_AEMET extends Frame  {
  21. /**
  22. *
  23. */
  24. private static final long serialVersionUID = 502635761186556414L;
  25.  
  26. private static final String FICHERO = "almacen.dat";
  27. private Controller controller;
  28. private AlmacenPoblaciones almacen;
  29.  
  30. // private IAlmacenPoblaciones almacenPoblaciones;
  31. // private List listaPoblaciones;
  32. // private List listaPredicciones;
  33.  
  34. /**
  35. * Constructor.
  36. * @throws GestorAEMETException
  37. */
  38. public InterfazAWT_AEMET(String titulo, int ancho, int alto) throws GestorAEMETException{
  39. super(titulo);
  40. controller = new Controller(this,true);
  41. setSize(ancho,alto);
  42. setLocationRelativeTo(null);
  43. setLayout( new BorderLayout() ); // Layout de la aplicación, podría ser otro
  44. initComponents();
  45. almacen = RecuperaAlmacenPoblaciones();
  46. }//Constructor
  47. //List<IPrediccion> lista = null;
  48.  
  49.  
  50. /*try {
  51. lista = gestor.getPredicciones( poblacion );
  52. poblacion.lista = lista;
  53. } catch( GestorAEMETException gae ) {
  54. System.out.println( gae.getMessage() );
  55. }*/
  56.  
  57. public AlmacenPoblaciones RecuperaAlmacenPoblaciones() {
  58. // Recuperamos el almacén
  59. AlmacenPoblaciones almacenPoblaciones1 = new AlmacenPoblaciones();
  60.  
  61. if (almacenPoblaciones1.recuperar(FICHERO))
  62. System.out.println("Recuperado el almacen del fichero " + FICHERO);
  63. else
  64.  
  65. System.out.println("No se pudo recuperar el almacen del fichero " + FICHERO);
  66. return almacenPoblaciones1;
  67.  
  68. }
  69. private void initComponents() throws GestorAEMETException{
  70.  
  71.  
  72. //Boton salir por defecto
  73. addWindowListener (new WindowAdapter () {
  74.          public void windowClosing(WindowEvent e) {
  75.          guardarAntesDeSalir ();
  76.              System.exit(0);
  77.             }
  78.    });
  79.  
  80. setMenuBar(addMenuBar());
  81. this.add (addToolBar(),BorderLayout.NORTH);
  82. this.add (addlineaEstado(), BorderLayout.SOUTH);
  83. this.add (addPanelIzquierda(), BorderLayout.WEST);
  84. this.add (addpredicciones(), BorderLayout.CENTER);
  85. }
  86.  
  87. public static class almacenPoblaciones extends LinkedHashMap<String, Set<IPoblacion>>{
  88.  
  89. /**
  90. *
  91. */
  92. private static final long serialVersionUID = 1L;
  93. private static almacenPoblaciones instance = null;
  94. static { instance = new almacenPoblaciones(); }
  95.  
  96. private almacenPoblaciones(){}
  97.  
  98. public static almacenPoblaciones getInstance(){
  99. return instance;
  100. }
  101. }
  102.  
  103. private MenuBar addMenuBar(){
  104. //Sitúo los menús desplegables
  105. MenuBar barraDeMenu = new MenuBar();
  106.  
  107. // Creo el menú Archivo
  108. Menu menuArchivo = new Menu("Archivo");
  109. MenuItem crearGuardar = new MenuItem ("Guardar");
  110. MenuItem crearCargar = new MenuItem ("Cargar");
  111. MenuItem salir = new MenuItem ("Salir");
  112. crearCargar.addActionListener(controller);
  113. crearGuardar.addActionListener(controller);
  114. salir.addActionListener(controller);
  115. menuArchivo.add(crearCargar);
  116. menuArchivo.add(crearGuardar);
  117. menuArchivo.add(salir);
  118.  
  119. // Creo el menú Provincias
  120. Menu menuProvincias = new Menu("Provincias");
  121. MenuItem crearProvincias = new MenuItem ("Crear provincia");
  122. MenuItem borrarProvincias = new MenuItem ("Borrar provincia");
  123. crearProvincias.addActionListener(controller);
  124. borrarProvincias.addActionListener(controller);
  125. menuProvincias.add(crearProvincias);
  126. menuProvincias.add(borrarProvincias);
  127.  
  128. // Creo el menu Poblaciones
  129. Menu menuPoblaciones = new Menu("Poblaciones");
  130. MenuItem crearPoblacion = new MenuItem ("Crear poblacion");
  131. MenuItem borrarPoblacion = new MenuItem ("Borrar poblacion");
  132. MenuItem ordenarNombre = new MenuItem ("Ordenar por nombre");
  133. MenuItem ordenarHabitantes = new MenuItem ("Ordenar por habitantes");
  134. MenuItem modPoblacion = new MenuItem ("Modificar poblacion");
  135. MenuItem movPoblacion = new MenuItem ("Mover poblacion");
  136. crearPoblacion.addActionListener(controller);
  137. borrarPoblacion.addActionListener(controller);
  138. ordenarNombre.addActionListener(controller);
  139. ordenarHabitantes.addActionListener(controller);
  140. modPoblacion.addActionListener(controller);
  141. movPoblacion.addActionListener(controller);
  142. menuPoblaciones.add(crearPoblacion);
  143. menuPoblaciones.add(borrarPoblacion);
  144. menuPoblaciones.add(ordenarNombre);
  145. menuPoblaciones.add(ordenarHabitantes);
  146. menuPoblaciones.add(modPoblacion);
  147. menuPoblaciones.add(movPoblacion);
  148.  
  149. // Creo el menú de ayuda
  150. Menu ayuda = new Menu("Ayuda");
  151. MenuItem acercaDe = new MenuItem("Acerca de");
  152. acercaDe.addActionListener(new AcercaDe());
  153. ayuda.add(acercaDe);
  154.  
  155. //Crea el
  156. barraDeMenu.add(menuArchivo);
  157. barraDeMenu.add(menuProvincias);
  158. barraDeMenu.add(menuPoblaciones);
  159. // Sitúo el menú de ayuda en su sitio
  160. barraDeMenu.setHelpMenu(ayuda);
  161. return barraDeMenu;
  162. }
  163.  
  164. private Panel addToolBar(){
  165. //Sitúo la línea de botones
  166. Panel lineaDeBotones = new Panel(new FlowLayout (FlowLayout.LEFT));
  167. lineaDeBotones.setBackground (Color.lightGray);
  168.  
  169. //Boton crear provincia
  170. Button proCrear = new Button("Crear provincia");
  171. proCrear.addActionListener(controller);
  172.  
  173. //Boton crear poblacion
  174. Button poCrear = new Button("Crear poblacion");
  175. poCrear.addActionListener(controller);
  176.  
  177. //Boton actualizar prediccion
  178. Button aPrediccion = new Button("Actualizar Predicción");
  179. aPrediccion.addActionListener(controller);
  180.  
  181. // Añadir los botones a la barra
  182. lineaDeBotones.add(proCrear);
  183. lineaDeBotones.add(poCrear);
  184. lineaDeBotones.add(aPrediccion);
  185. return lineaDeBotones;
  186. }
  187.  
  188. private Panel addPanelIzquierda(){
  189. //Creamos  panel para mostrar provincias y poblaciones y lo colocamos a la izquierda
  190. Panel izquierda = new Panel(new GridLayout(4,1));
  191.  
  192. Label lProvincia = new Label("Provincias:");
  193. List tProvincias = new List();
  194. Iterator<String> i = almacen.getProvincias().iterator();
  195. while(i.hasNext()){
  196. tProvincias.add(i.next().toString());
  197. }
  198.  
  199.  
  200. Label lPoblacion = new Label("Poblaciones:");
  201. List tPoblaciones = new List();
  202.  
  203. izquierda.add(lProvincia);
  204. izquierda.add(tProvincias);
  205. izquierda.add(lPoblacion);
  206. izquierda.add(tPoblaciones);
  207. return izquierda;
  208. }
  209.  
  210. private Panel addpredicciones(){
  211. //Creamos el panel de las predicciones
  212. Panel predicciones = new Panel(new BorderLayout());
  213. Label lPrediccion = new Label("Predicciones de :");
  214. List tPrediccion = new List();
  215. predicciones.add(lPrediccion,BorderLayout.NORTH);
  216. predicciones.add(tPrediccion,BorderLayout.CENTER);
  217. return predicciones;
  218. }
  219.  
  220. private Panel addlineaEstado(){
  221. //Sitúo la línea de estado
  222. Panel lineaDeEstado = new Panel();
  223. lineaDeEstado.setLayout (new FlowLayout (FlowLayout.LEFT));
  224. lineaDeEstado.setBackground (Color.lightGray);
  225. Label ventanaDeeventos = new Label("Gestor AEMET v1.0 (PAA)");
  226. lineaDeEstado.add (ventanaDeeventos);
  227. return lineaDeEstado;
  228. }
  229.  
  230. private void guardarAntesDeSalir () {
  231.  
  232. // Guardar almacen
  233. System.out.println ("Gracias por utilizar nuestro programa");
  234. }
  235.  
  236.  
  237. /**
  238. * Clase que implementa la acción del menú "acerca de".
  239. */
  240. class AcercaDe implements ActionListener{  // Clase interna
  241. public void actionPerformed(ActionEvent e){
  242. VentanaAcercaDe ventanaAcercaDe = new VentanaAcercaDe(InterfazAWT_AEMET.this);
  243. ventanaAcercaDe.setVisible(true);
  244. }
  245. }//Acerca de
  246.  
  247.  
  248. //****Acciones menu archivo****
  249. class GuardarArchivo implements ActionListener {
  250. public void actionPerformed(ActionEvent e) {
  251.  
  252. }
  253. }//Guardar en un fichero
  254.  
  255. class CargarArchivo implements ActionListener {
  256. public void actionPerformed(ActionEvent e) {
  257.  
  258. }
  259. }//Cargar desde un archivo
  260.  
  261. class Salir implements ActionListener {
  262. public void actionPerformed(ActionEvent e) {
  263.  
  264. }
  265. }//Salir de la aplicacion
  266.  
  267.  
  268.  
  269.  
  270.  
  271. //Ordena por nombre las poblaciones
  272. class OrdenarNombre implements ActionListener {
  273. public void actionPerformed(ActionEvent e) {
  274.  
  275. }
  276. }
  277.  
  278. //Ordena por numero de habitantes las poblaciones
  279. class OrdenarHabitantes implements ActionListener {
  280. public void actionPerformed(ActionEvent e) {
  281.  
  282. }
  283. }
  284.  
  285. //Modifica los valores de una poblacion
  286. class ModPoblacion implements ActionListener {
  287. public void actionPerformed(ActionEvent e) {
  288.  
  289. }
  290. }
  291.  
  292. //Mueve una poblacion de provincia
  293. class MovPoblacion implements ActionListener {
  294. public void actionPerformed(ActionEvent e) {
  295.  
  296. }
  297. }
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305. //Accion actualizar prediccion
  306. class ActualizarPrediccion implements ActionListener {
  307. public void actionPerformed(ActionEvent e) {
  308.  
  309. }
  310. }
  311.  
  312. /**
  313. * Método main.
  314. * @throws GestorAEMETException
  315. */
  316. public static void main(String[] args) throws GestorAEMETException {
  317.  
  318. InterfazAWT_AEMET mimarco = new InterfazAWT_AEMET("Gestor AEMET",1000,500);
  319. mimarco.setVisible(true);
  320. } // Main
  321. }
  322.  

lo que hago es leer el almacenpoblaciones del archivo, almacenarlo en una variable y posteriormente se me habia ocurrido para mostar en las listas de poblacion y provincia hacer un iterator con los metodos de almacenPoblaciones getPoblaciones y getProvincias, (los cuales devuelven un set cada uno) e ir añadiendo a ambas listas las corresponsientes provincias y poblaciones.

Pero claro si hago todo esto cuando inicio el programa, en el momento que cree una nueva poblacion o provincia he de refrescar las listas por lo que deberia de utilizar un metodo que sea llamado desde los actionlistener de los botones correspondientes no?.


en el programa de arriba me da error aqui:
Código
  1. Iterator<String> i = almacen.getProvincias().iterator();

NullPointerException, no se por que me dice que no hay nada si previamente he utilizado la primera practica para añadir 4 provincias.
En línea

Páginas: 1 [2] 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pregunta sobre como ver los datos de un frame a otro en Netbeans
Java
XpandyX 0 3,186 Último mensaje 8 Marzo 2011, 17:56 pm
por XpandyX
Cerrar Frame al Abrir otro
Java
monsefoster 0 3,596 Último mensaje 8 Abril 2011, 19:33 pm
por monsefoster
[Solucionado] como meter un form dentro de otro en c#
.NET (C#, VB.NET, ASP)
chelita 2 13,988 Último mensaje 3 Junio 2011, 16:43 pm
por chelita
Facebook dentro de un frame.
Desarrollo Web
A2Corp 4 4,004 Último mensaje 20 Abril 2012, 18:24 pm
por A2Corp
Como pasar un Frame o un Picturebox completo de un form a otro.
Programación Visual Basic
79137913 0 2,502 Último mensaje 12 Junio 2012, 20:08 pm
por 79137913
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines