Autor
|
Tema: Meter un Frame dentro de otro Frame (Leído 18,619 veces)
|
Usuario Invitado
Desconectado
Mensajes: 625
|
Te repito por tercera vez. Esto no debe ir: 242. VentanaAcercaDe ventanaAcercaDe = new VentanaAcercaDe(InterfazAWT_AEMET.this); 243. ventanaAcercaDe.setVisible(true); 244. } 245. }//Acerca de 246. 247. 248. //****Acciones menu archivo**** 251. 252. } 253. }//Guardar en un fichero 254. 257. 258. } 259. }//Cargar desde un archivo 260. 263. 264. } 265. }//Salir de la aplicacion 266. 267. 268. 269. 270. 271. //Ordena por nombre las poblaciones 274. 275. } 276. } 277. 278. //Ordena por numero de habitantes las poblaciones 281. 282. } 283. } 284. 285. //Modifica los valores de una poblacion 288. 289. } 290. } 291. 292. //Mueve una poblacion de provincia 295. 296. } 297. } 298. 299. 300. 301. 302. 303. 304. 305. //Accion actualizar prediccion 308. 309. } 310. }
Esto es reemplazado por el MainWindowController: @Override String targetLabel = evt. getActionCommad(); evaluateAction(targetLabel); } private void evaluateAction (String targetLabel ) { switch(targetLabel) { case "Nueva Provincia": new NewProvinceDialog(gui).setVisible(true); break; case "Nueva Población": new NewPopulationDialog(gui).setVisible(true); break; case "Salir": gui.dispose(); // asi con todos los botones } }
AlmacenProvincias (ProvinceService)Vuelvo a repetir, NO mezclar la lógica de negocio con la vistas. Aplica el patrón MVC que es mucho más sencillo, si te empeñas en seguir mezclando las cosas así, llegarás a un punto donde te estanques porque simplemente no hay arquitectura en tu aplicación, se convertirá en un montón de código sin sentido. Veamos como puedes realizar lo que deseas. Primero, ProvinceService será un Map: import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class ProvinceService extends LinkedHashMap<String, Set<Population>> { private static ProvinceService instance; static { instance = new ProvinceService(); } private ProvinceService() {} public ProvinceService getInstance() { return instance; } if(this.containsKey(provinceName)) throw new IlegalArgumentException("La provincia ya existe"); else { this.put(provinceName, null); response = "Provinca añadida correctamente"; } return response; } if(!this.containsKey(provinceName)) { throw new IlegalArgumentException("La provincia no existe, primero créela"); } else { Set<Population> provincePopulation = getPopulationByProvinceName(provinceName); provincePopulation.add(population); response = "Provincia añadida correctamente"; } return response; } if(!this.containsKey(provinceName)) { Set<Population> provincePopulation = new HashSet<>(); provincePopulation.add(population); provincesAndPopulations.put(provinceName, provincePopulation); response = "Provincia y población añadida correctamente"; } else { throw new IlegalArgumentException("La provincia ya existe. Agregue solo la población"); } return response; } private Set <Population > getPopulationByProvinceName (String provinceName ) { Set<Population> population = null; for(Map. Entry<String, Set <Population >> entry : this. entrySet()) { if(entry.getKey().equals(provinceName)) population = entry.getValue(); } return population; } }
MainWindowController.javaimport java.awt.event.ActionEvent; import java.awt.event.ActionListener; private MainWindow gui; public MainWindowController(MainWindow gui) { this.gui = gui; } @Override String targetLabel = evt. getActionCommad(); evaluateAction(targetLabel); } private void evaluateAction (String targetLabel ) { switch(targetLabel) { case "Nueva Provincia": new NewProvinceDialog(gui).setVisible(true); break; case "Nueva Población": new NewPopulationDialog(gui).setVisible(true); break; case "Salir": gui.dispose(); // asi con todos los botones } } }
NewProvinceDialog.javaimport java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class NewProvinceDialog extends JDialog { private static final long serialVersionUID = -3369879094143739366L; public NewProvinceDialog (JFrame parent ) { super(parent); initComponents(parent); } private void initComponents (JFrame parent ) { btnAddProvince = new JButton("Agregar"); constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.weighty = 1.0; panel.add(label, constraints); constraints.gridx = 1; constraints.gridy = 0; constraints.gridwidth = 3; constraints.gridheight = 1; constraints.weightx = 1.0; panel.add(txtProvince, constraints); constraints.gridx = 3; constraints.gridy = 1; constraints.gridwidth = 1; constraints.gridheight = 1; panel.add(btnAddProvince, constraints); this.add(panel); this.setTitle("Agregar nueva provincia"); this.setSize(280,100); this.setModal(true); this.setLocationRelativeTo(parent); this.setResizable(false); } // getters de los controles public JTextField getTxtProvince () { return txtProvince ; } }
NewProvinceDialogController.javaimport java.awt.event.ActionEvent; import java.awt.event.ActionListener; private NewProvinceDialog gui; public NewProvinceDialogController(NewProvinceDialog gui) { this.gui = gui; } @Override String targetLabel = evt. getActionCommand(); if(targetLabel.equals("Añadir")) { try { ProvinceService provinceService = ProvinceService.getInstance(); String provinceName = gui. getTxtProvince(). getText(); String response = provinceService. addProvince(provinceName ); // muestra 'La provinca ya existe' } } else { gui.dispose(); } } }
ProvinceService la he transformado para que sea un LinkedHashMap. Como te dije será un Singleton (No es nada de extraordinario, es una clase normal solo que su constructor es privado evitando que sea creen instancias de ella) que será compartida por todos los objetos. En NewProvinceDialogController hacemos uso de ProvinceService: @Override String targetLabel = evt. getActionCommand(); if(targetLabel.equals("Añadir")) { try { ProvinceService provinceService = ProvinceService.getInstance(); String provinceName = gui. getTxtProvince(). getText(); String response = provinceService. addProvince(provinceName ); // muestra 'La provinca ya existe' } } else { gui.dispose(); } }
Si se ha clickeado "Añadir" en el JDialog para añadir una nueva provincia, se obtiene la única instancia de ProvinceService que como ya dijimos es un LinkedHashMap. Así mismo, sigue teniendo los mismos métodos por lo que todo sigue funcionando como antes. Obtenemos el JTextField txtProvince de NewProvinceDialog y usamos el método getText() para obtener lo que el usuario ha escrito. Luego, llamamos al método addProvince que se encargará de verificar si existe o si no existe y tomar la acción adecuada. Si la provincia existe mostrará un mensaje que es el que se le asocia a la Exception lanzada desde el método addProvince:
Que luego recojemos en el controlador de NewProvinceDialogController: // muestra 'La provinca ya existe' }
Si la provincia se añadió correctamente, el mensaje de éxito retornado se muestra: String response = provinceService. addProvince(provinceName );
Sigue el mismo patrón. De ésta manera modularizas bien tu aplicación y le das una arquitectura sólida, claves para un diseño escalable
|
|
« Última modificación: 19 Marzo 2015, 23:23 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
Mensajes: 66
|
la clase principal tiene tantos listener por que aun no los he quitado, segun voy creando las clases los voy eliminando para que quede como MWC: he intentado hacer lo que me has dicho creando otra clase controller para la ventana provincia,me dibuja la ventana pero no me deja cerrarla por lo que el codigo gui.dispose(); no lo ejecuta: package Provincia; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class VentanaCrearProvinciaController implements ActionListener { private VentanaCrearProvincia gui; public VentanaCrearProvinciaController(VentanaCrearProvincia gui){ this.gui = gui; } String label = e. getActionCommand(); if(label.equals("Crear")){ }else{ gui.dispose(); } } }
ventana crearprovincia package Provincia; import java.awt.Button; import java.awt.Dialog; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; import java.awt.TextField; public class VentanaCrearProvincia extends Dialog { private static final long serialVersionUID = -2530069431684593677L; public VentanaCrearProvincia (Frame gui ) { super(gui); initComponents(gui); } public void initComponents (Frame gui ){ cancelar = new Button("Cancelar"); setLocationRelativeTo(gui); this.setTitle("Crear Provincia"); this.setSize(300, 100); panel.add(label); panel.add(textField); panel.add(crear); panel.add(cancelar); this.add(panel); } return textField; } }
respecto al almacenpoblaciones, este es mi codigo, que es el correspondiente a la primera practica y funciona perfectamente, como implementa las interfaces iAlmacenpoblaciones e IPoblacionAEMET, no tengo que hacer extends de linkedhashmap ni de set no? por que esas interfaces ya lo tendran implementado, las interfaces nos las han dado en un paquete .jar import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import paa.provincias.IAlmacenPoblaciones; import paa.provincias.IPoblacion; import paa.provincias.IPoblacionAEMET; /** * Clase que modela un almacen de poblaciones * @author kikian * */ public class AlmacenPoblaciones implements IAlmacenPoblaciones, Serializable,IPoblacionAEMET { /** * */ private static final long serialVersionUID = 1L; private Map<String, SortedSet<IPoblacion>> Aprovincias = new HashMap<String, SortedSet<IPoblacion>>(); /**Ordenación principal en orden alfabético por el campo nombre de la población. */ final static int ORDENARPORNOMBRE = 2; /**Ordenación principal por el número de habitantes en sentido ascendente, en segundo lugar, en caso de igualdad, por * el orden alfabético del campo nombre. */ final static int ORDENARPORHABITANTES = 3; /** * Constructor de la clase AlmacenPoblaciones */ public AlmacenPoblaciones(){ Aprovincias = new HashMap<String, SortedSet<IPoblacion>>(); } /** * Añade una población a la provincia correspondiente si la población no existe ya en ella, o sea, no hay ya otra población con el mismo nombre. Las poblaciones se almacenarán ordenadas según el criterio de ordenación definido. @param provincia - Provincia en la que se añadira la poblacion @param poblacion - Poblacion a añadir */ public boolean addPoblacion (String provincia, IPoblacion poblacion ) { boolean res = false; if(provincia == null || poblacion == null || !Aprovincias.containsKey(provincia)){ res = false; System. out. println("La Provincia no existe, creela antes de añadir poblacion"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); sPoblacion.add(poblacion); Aprovincias.put(provincia, sPoblacion); res = true; } return res; } /** * Añade una nuevo provincia al almacén de poblaciones si no está ya presente en el almacén. Si ya había una del mismo nombre no se realiza ningún cambio en el almacén y la llamada devuelve false. @param provincia - La provincia que queremos añadir */ public boolean addProvincia (String provincia ) { boolean res = false; if(Aprovincias.containsKey(provincia)){ System. out. println("Ya existe la provincia"); }else{ Aprovincias.put(provincia, new TreeSet<IPoblacion>()); res = true; } return res; } /** * Indica si ya existe en la provincia una población con ese nombre. * @param provincia - Nombre de la provincia en la que vamos a buscar * @param poblacion - Nombre de la poblacion que queremos buscar */ public boolean containsPoblacion (String provincia, String poblacion ) { boolean res = false; if(provincia == null || !Aprovincias.containsKey(provincia)){ System. out. println("La provincia no existe, creela antes de eliminar poblacion"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); for(IPoblacion p:sPoblacion){ if(p.getNombre()==poblacion){ res = true; } } } return res; } /** * Indica si ya existe en la provincia una población. * @param provincia - La provincia en la que buscaremos * @param poblacion - La poblacion que queremos buscar */ public boolean containsPoblacion (String provincia, IPoblacion poblacion ) { boolean res = false; if(provincia == null || !Aprovincias.containsKey(provincia)){ System. out. println("La provincia no existe, creela antes de eliminar poblacion"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); if(sPoblacion.contains(poblacion)){ res = true; } } return res; } /** * Indica si ya existe en el almacén la provincia correspondiente. * @param provincia - La provincia que queremos comprobar */ public boolean containsProvincia (String provincia ) { boolean res = false; if(Aprovincias.containsKey(provincia)){ res = true; System. out. println("La provincia esta en el almacen"); }else{ System. out. println("La provincia no esta en el almacen"); } return res; } /** * Borra la población situada en la posición correspondiente dentro de la provincia. La posición es un * entero entre 1 y el número de poblaciones que contiene la provincia. La posición de una * población es variable, puesto que cambia si se borran poblaciones de la provincia o se reordena. * @param provincia - Provincia en la que buscaremos la poblacion * @param posicion - posicion de la poblacion que sera borrada */ public boolean delPoblacion (String provincia, int posicion ) { if(!Aprovincias.containsKey(provincia)){ System. out. println("No existe la provincia"); return false; }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); Iterator<IPoblacion> ite = sPoblacion.iterator(); int contador = 1; while(ite.hasNext() && contador < posicion){ ite.next(); contador++; } if(ite.hasNext() && contador == posicion){ ite.next(); ite.remove(); Aprovincias.put(provincia, sPoblacion); return true; } } return false; } /** * Borra de la provincia la población que se pasa como parámetro. * @param provincia - La provincia donde buscaremos * @param poblacion - La poblacion que se eliminara */ public boolean delPoblacion (String provincia, IPoblacion poblacion ) { boolean res = false; if(!Aprovincias.containsKey(provincia)){ System. out. print("La provincia no existe"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); sPoblacion.remove(poblacion); Aprovincias.put(provincia, sPoblacion); } return res; } /** * Borra de la provincia la población cuyo nombre se pasa como parámetro. * @param provincia - La provincia de donde eliminaremos la poblacion * @param poblacion - El nombre de la poblacion */ public boolean delPoblacion (String provincia, String poblacion ) { if(!Aprovincias.containsKey(provincia)){ System. out. print("La provincia no existe"); return false; }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); for(IPoblacion s : sPoblacion){ if(s.getNombre().equals(poblacion)){ sPoblacion.remove(s); return true; } } return false; } } /** * Borra un provincia del almacén de poblaciones si está presente en el almacén. Si no hay una del mismo nombre no se realiza ningún cambio en el almacén y la llamada devuelve false. @param provincia - La provincia que queremos eliminar */ public boolean delProvincia (String provincia ) { if(Aprovincias.containsKey(provincia)){ Aprovincias.remove(provincia); return true; }else{ System. out. println("La provincia no esta en el almacen"); return false; } } /** * Devuelve el número de poblaciones que contiene la provincia cuyo nombre se indica. * @param provincia - La provincia de la que obtendremos el numero de poblaciones */ public int getNumPoblaciones (String provincia ) { SortedSet<IPoblacion> spoblacion = Aprovincias.get(provincia); return spoblacion.size(); } /** * Devuelve la población situada en la posición correspondiente dentro de la provincia. La posición es un * entero entre 1 y el número de poblaciones que contiene la provincia. La posición de una población es variable, puesto * que cambia si se borran poblaciones de la provincia o se reordenan. * @param provincia - la provincia en la que se buscara * @param posicion - la posicion que se eliminara */ public IPoblacion getPoblacion (String provincia, int posicion ) { IPoblacion pBuscada = null; if(!Aprovincias.containsKey(provincia)){ System. out. println("No existe la provincia"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); Iterator<IPoblacion> ite = sPoblacion.iterator(); int contador = 1; while(ite.hasNext() && contador < posicion){ ite.next(); contador++; } if(ite.hasNext() && contador == posicion){ pBuscada = ite.next(); ite.remove(); } } return pBuscada; } /**Devuelve de la provincia la población que posee el nombre que se pasa como parámetro. * */ public IPoblacion getPoblacion (String provincia, String poblacion ) { SortedSet<IPoblacion> spoblacion = Aprovincias.get(provincia); IPoblacion p = null; for(IPoblacion s : spoblacion){ if(s.getNombre().equals(poblacion)){ p = s; } } return p; } /** * Devuelve todas las poblaciones de la provincia correspondiente ordenadas según el criterio actual. * @param provincia - La provincia de la que obtendremos el Set con las poblaciones */ public SortedSet <IPoblacion > getPoblaciones (String provincia ) { SortedSet<IPoblacion> spoblacion = null; if(!Aprovincias.containsKey(provincia)){ System. out. println("No existe la provincia"); }else{ spoblacion = Aprovincias.get(provincia); } return spoblacion; } /** * Devuelve un conjunto con los nombres de los provincias que existen en el almacén de poblaciones. */ public Set<String> getProvincias() { Set<String> provincias = Aprovincias.keySet(); return provincias; } /**Guarda el almacén de poblaciones en el fichero cuyo nombre se pasa como parámetro. Devuelve true si se ha guardado * correctamente y false si hay algún tipo de error o excepción. * @param escritura - nombre del fichero */ public boolean guardar (String escritura ) { try{ salida.writeObject(Aprovincias); e.printStackTrace(); } finally{ if(salida!=null) try{ salida.close(); return true; e.printStackTrace(); } } return false; } /**Permite cambiar el criterio de ordenación de la correspondiente provincia, las poblaciones almacenadas * serán reordenadas según el nuevo criterio de ordenación que se indica como parámetro utilizando las constantes * predefinidas: ORDENARPORNOMBRE ú ORDENARPORHABITANTES (ver su descripción en fields). * @param provincia - Provincia en la que se reordenaran las poblaciones * @param ordenarPor - Metodo para ordenar las poblaciones */ public boolean ordenarPor (String provincia, int ordenarPor ) { if(provincia != null || ordenarPor != ORDENARPORNOMBRE || ordenarPor != ORDENARPORHABITANTES ){ if(ordenarPor == ORDENARPORNOMBRE){ //Metemos en un Set las poblaciones de la provincia asociada Set<IPoblacion> spoblacion = Aprovincias.get(provincia); //Creamos un nuevo Set de tipo TreeSet y le aplicamos el criterio de ordenacion //de la clase porNombre, luego le añadimos todas las poblaciones para que se ordenen TreeSet<IPoblacion> n1Poblacion = new TreeSet<IPoblacion>(new porNombre()); n1Poblacion.addAll(spoblacion); Aprovincias.put(provincia, n1Poblacion); }else if(ordenarPor == ORDENARPORHABITANTES){ //Mismo procedimiento que ORDENARPORNOMBRE pero ahora utilizamos el criterio de ordenacion //de la clase CompareHabitantes Set<IPoblacion> spoblacion = Aprovincias.get(provincia); TreeSet<IPoblacion> n2Poblacion = new TreeSet<IPoblacion>(new CompareHabitantes()); n2Poblacion.addAll(spoblacion); Aprovincias.put(provincia, n2Poblacion); } return true; } return false; } /**Recupera un almacén de poblaciones del fichero cuyo nombre se pasa como parámetro. Si el fichero no existe o * hay algún tipo de excepción devuelve false y crea un almacén vacío. Si lo recupera, devuelve true. * @param lectura - Nombre del archivo que leeremos */ public boolean recuperar (String lectura ) { try{ @SuppressWarnings("unchecked") Map<String, SortedSet<IPoblacion>> Aprovincias2 = (Map<String, SortedSet<IPoblacion>>) entrada.readObject(); System. out. println(Aprovincias2. entrySet()); e.printStackTrace(); } finally{ if(entrada!=null) try{ entrada.close(); return true; e.printStackTrace(); } } return false; } /** * Clase para comparar las poblaciones por nombre * @author kikian * */ class porNombre implements Comparator<IPoblacion>{ @Override public int compare(IPoblacion o1, IPoblacion o2) { return o1.getNombre().compareTo(o2.getNombre()); } } @Override public String getCodigoAEMET () { // TODO Auto-generated method stub return null; } }
|
|
|
En línea
|
|
|
|
Usuario Invitado
Desconectado
Mensajes: 625
|
Olvidaba que es AWT. Reemplaza gui.dispose por: window.dispose();
Respecto a lo otro, si el docente les ha dado esas interfaces en un JAR pues debes usarlas y no hacerme caso cuando te dije que extendieras de LinkedHashMap.
|
|
« Última modificación: 20 Marzo 2015, 15:53 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
Mensajes: 66
|
pero si es awt no puedo utilizar Swing utilities por que esta incluido dentro de Swing.
tengo que crear un metodo que actualize las listas de las predicciones cada vez que borre o añada poblacion o provincia no?
|
|
|
En línea
|
|
|
|
Usuario Invitado
Desconectado
Mensajes: 625
|
Cuando se dice que no utilices Swing se hace referencia a que no utilices controles gráficos de Swing. SwingUtilities es simplemente una clase utilitaria.
Tampoco hay que irse por los extremos xD
Respecto a lo otro, sí hay que hay que hacer un método que actualice las provincias y poblaciones.
|
|
« Última modificación: 21 Marzo 2015, 11:07 am 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
Mensajes: 66
|
sigue sin cerrar la ventana, los botones crear y cancelar no hacen nada, y el de cerrar la ventana hace que se cierre por que puse el window adapter sino tampoco se cerraria: package Provincia; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.SwingUtilities; import Provincia.VentanaCrearProvincia; public class VentanaCrearProvinciaController implements ActionListener { private VentanaCrearProvincia gui; public VentanaCrearProvinciaController(VentanaCrearProvincia gui){ this.gui = gui; } String label = e. getActionCommand(); if(label.equals("Crear")){ try{ Aviso aviso = new Aviso(gui,e1.getMessage()); } }else{ window.dispose(); } } }
package Provincia; import java.awt.Button; import java.awt.Dialog; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; import java.awt.TextField; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class VentanaCrearProvincia extends Dialog { private static final long serialVersionUID = -2530069431684593677L; public VentanaCrearProvincia (Frame gui ) { super(gui); initComponents(gui); } public void initComponents (Frame gui ){ cancelar = new Button("Cancelar"); setLocationRelativeTo(gui); this.setTitle("Crear Provincia"); this.setSize(300, 100); panel.add(label); panel.add(textField); panel.add(crear); panel.add(cancelar); this.add(panel); VentanaCrearProvincia.this.dispose(); } }); } return textField; } }
respecto al almacen poblaciones lo he dejado asi: import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import paa.provincias.IAlmacenPoblaciones; import paa.provincias.IPoblacion; import paa.provincias.IPoblacionAEMET; /** * Clase que modela un almacen de poblaciones * @author kikian * */ public class AlmacenPoblaciones implements IAlmacenPoblaciones, Serializable,IPoblacionAEMET { /** * */ private static final long serialVersionUID = 1L; private Map<String, SortedSet<IPoblacion>> Aprovincias = new HashMap<String, SortedSet<IPoblacion>>(); /**Ordenación principal en orden alfabético por el campo nombre de la población. */ final static int ORDENARPORNOMBRE = 2; /**Ordenación principal por el número de habitantes en sentido ascendente, en segundo lugar, en caso de igualdad, por * el orden alfabético del campo nombre. */ final static int ORDENARPORHABITANTES = 3; /** * Constructor de la clase AlmacenPoblaciones */ public AlmacenPoblaciones(){ Aprovincias = new HashMap<String, SortedSet<IPoblacion>>(); } private static AlmacenPoblaciones instance = null; static { instance = new AlmacenPoblaciones(); } public static AlmacenPoblaciones getInstance(){ return instance; } /** * Añade una población a la provincia correspondiente si la población no existe ya en ella, o sea, no hay ya otra población con el mismo nombre. Las poblaciones se almacenarán ordenadas según el criterio de ordenación definido. @param provincia - Provincia en la que se añadira la poblacion @param poblacion - Poblacion a añadir */ public boolean addPoblacion (String provincia, IPoblacion poblacion ) { boolean res = false; if(provincia == null || poblacion == null || !Aprovincias.containsKey(provincia)){ res = false; System. out. println("La Provincia no existe, creela antes de añadir poblacion"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); sPoblacion.add(poblacion); Aprovincias.put(provincia, sPoblacion); res = true; } return res; } /** * Añade una nuevo provincia al almacén de poblaciones si no está ya presente en el almacén. Si ya había una del mismo nombre no se realiza ningún cambio en el almacén y la llamada devuelve false. @param provincia - La provincia que queremos añadir */ public boolean addProvincia (String provincia ) { boolean res = false; if(Aprovincias.containsKey(provincia)){ System. out. println("Ya existe la provincia"); }else{ Aprovincias.put(provincia, new TreeSet<IPoblacion>()); res = true; } return res; } /** * Indica si ya existe en la provincia una población con ese nombre. * @param provincia - Nombre de la provincia en la que vamos a buscar * @param poblacion - Nombre de la poblacion que queremos buscar */ public boolean containsPoblacion (String provincia, String poblacion ) { boolean res = false; if(provincia == null || !Aprovincias.containsKey(provincia)){ System. out. println("La provincia no existe, creela antes de eliminar poblacion"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); for(IPoblacion p:sPoblacion){ if(p.getNombre()==poblacion){ res = true; } } } return res; } /** * Indica si ya existe en la provincia una población. * @param provincia - La provincia en la que buscaremos * @param poblacion - La poblacion que queremos buscar */ public boolean containsPoblacion (String provincia, IPoblacion poblacion ) { boolean res = false; if(provincia == null || !Aprovincias.containsKey(provincia)){ System. out. println("La provincia no existe, creela antes de eliminar poblacion"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); if(sPoblacion.contains(poblacion)){ res = true; } } return res; } /** * Indica si ya existe en el almacén la provincia correspondiente. * @param provincia - La provincia que queremos comprobar */ public boolean containsProvincia (String provincia ) { boolean res = false; if(Aprovincias.containsKey(provincia)){ res = true; System. out. println("La provincia esta en el almacen"); }else{ System. out. println("La provincia no esta en el almacen"); } return res; } /** * Borra la población situada en la posición correspondiente dentro de la provincia. La posición es un * entero entre 1 y el número de poblaciones que contiene la provincia. La posición de una * población es variable, puesto que cambia si se borran poblaciones de la provincia o se reordena. * @param provincia - Provincia en la que buscaremos la poblacion * @param posicion - posicion de la poblacion que sera borrada */ public boolean delPoblacion (String provincia, int posicion ) { if(!Aprovincias.containsKey(provincia)){ System. out. println("No existe la provincia"); return false; }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); Iterator<IPoblacion> ite = sPoblacion.iterator(); int contador = 1; while(ite.hasNext() && contador < posicion){ ite.next(); contador++; } if(ite.hasNext() && contador == posicion){ ite.next(); ite.remove(); Aprovincias.put(provincia, sPoblacion); return true; } } return false; } /** * Borra de la provincia la población que se pasa como parámetro. * @param provincia - La provincia donde buscaremos * @param poblacion - La poblacion que se eliminara */ public boolean delPoblacion (String provincia, IPoblacion poblacion ) { boolean res = false; if(!Aprovincias.containsKey(provincia)){ System. out. print("La provincia no existe"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); sPoblacion.remove(poblacion); Aprovincias.put(provincia, sPoblacion); } return res; } /** * Borra de la provincia la población cuyo nombre se pasa como parámetro. * @param provincia - La provincia de donde eliminaremos la poblacion * @param poblacion - El nombre de la poblacion */ public boolean delPoblacion (String provincia, String poblacion ) { if(!Aprovincias.containsKey(provincia)){ System. out. print("La provincia no existe"); return false; }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); for(IPoblacion s : sPoblacion){ if(s.getNombre().equals(poblacion)){ sPoblacion.remove(s); return true; } } return false; } } /** * Borra un provincia del almacén de poblaciones si está presente en el almacén. Si no hay una del mismo nombre no se realiza ningún cambio en el almacén y la llamada devuelve false. @param provincia - La provincia que queremos eliminar */ public boolean delProvincia (String provincia ) { if(Aprovincias.containsKey(provincia)){ Aprovincias.remove(provincia); return true; }else{ System. out. println("La provincia no esta en el almacen"); return false; } } /** * Devuelve el número de poblaciones que contiene la provincia cuyo nombre se indica. * @param provincia - La provincia de la que obtendremos el numero de poblaciones */ public int getNumPoblaciones (String provincia ) { SortedSet<IPoblacion> spoblacion = Aprovincias.get(provincia); return spoblacion.size(); } /** * Devuelve la población situada en la posición correspondiente dentro de la provincia. La posición es un * entero entre 1 y el número de poblaciones que contiene la provincia. La posición de una población es variable, puesto * que cambia si se borran poblaciones de la provincia o se reordenan. * @param provincia - la provincia en la que se buscara * @param posicion - la posicion que se eliminara */ public IPoblacion getPoblacion (String provincia, int posicion ) { IPoblacion pBuscada = null; if(!Aprovincias.containsKey(provincia)){ System. out. println("No existe la provincia"); }else{ SortedSet<IPoblacion> sPoblacion = Aprovincias.get(provincia); Iterator<IPoblacion> ite = sPoblacion.iterator(); int contador = 1; while(ite.hasNext() && contador < posicion){ ite.next(); contador++; } if(ite.hasNext() && contador == posicion){ pBuscada = ite.next(); ite.remove(); } } return pBuscada; } /**Devuelve de la provincia la población que posee el nombre que se pasa como parámetro. * */ public IPoblacion getPoblacion (String provincia, String poblacion ) { SortedSet<IPoblacion> spoblacion = Aprovincias.get(provincia); IPoblacion p = null; for(IPoblacion s : spoblacion){ if(s.getNombre().equals(poblacion)){ p = s; } } return p; } /** * Devuelve todas las poblaciones de la provincia correspondiente ordenadas según el criterio actual. * @param provincia - La provincia de la que obtendremos el Set con las poblaciones */ public SortedSet <IPoblacion > getPoblaciones (String provincia ) { SortedSet<IPoblacion> spoblacion = null; if(!Aprovincias.containsKey(provincia)){ System. out. println("No existe la provincia"); }else{ spoblacion = Aprovincias.get(provincia); } return spoblacion; } /** * Devuelve un conjunto con los nombres de los provincias que existen en el almacén de poblaciones. */ public Set<String> getProvincias() { Set<String> provincias = Aprovincias.keySet(); return provincias; } /**Guarda el almacén de poblaciones en el fichero cuyo nombre se pasa como parámetro. Devuelve true si se ha guardado * correctamente y false si hay algún tipo de error o excepción. * @param escritura - nombre del fichero */ public boolean guardar (String escritura ) { try{ salida.writeObject(Aprovincias); e.printStackTrace(); } finally{ if(salida!=null) try{ salida.close(); System. out. println("Guardado"); return true; e.printStackTrace(); } } return false; } /**Permite cambiar el criterio de ordenación de la correspondiente provincia, las poblaciones almacenadas * serán reordenadas según el nuevo criterio de ordenación que se indica como parámetro utilizando las constantes * predefinidas: ORDENARPORNOMBRE ú ORDENARPORHABITANTES (ver su descripción en fields). * @param provincia - Provincia en la que se reordenaran las poblaciones * @param ordenarPor - Metodo para ordenar las poblaciones */ public boolean ordenarPor (String provincia, int ordenarPor ) { if(provincia != null || ordenarPor != ORDENARPORNOMBRE || ordenarPor != ORDENARPORHABITANTES ){ if(ordenarPor == ORDENARPORNOMBRE){ //Metemos en un Set las poblaciones de la provincia asociada Set<IPoblacion> spoblacion = Aprovincias.get(provincia); //Creamos un nuevo Set de tipo TreeSet y le aplicamos el criterio de ordenacion //de la clase porNombre, luego le añadimos todas las poblaciones para que se ordenen TreeSet<IPoblacion> n1Poblacion = new TreeSet<IPoblacion>(new porNombre()); n1Poblacion.addAll(spoblacion); Aprovincias.put(provincia, n1Poblacion); }else if(ordenarPor == ORDENARPORHABITANTES){ //Mismo procedimiento que ORDENARPORNOMBRE pero ahora utilizamos el criterio de ordenacion //de la clase CompareHabitantes Set<IPoblacion> spoblacion = Aprovincias.get(provincia); TreeSet<IPoblacion> n2Poblacion = new TreeSet<IPoblacion>(new CompareHabitantes()); n2Poblacion.addAll(spoblacion); Aprovincias.put(provincia, n2Poblacion); } return true; } return false; } /**Recupera un almacén de poblaciones del fichero cuyo nombre se pasa como parámetro. Si el fichero no existe o * hay algún tipo de excepción devuelve false y crea un almacén vacío. Si lo recupera, devuelve true. * @param lectura - Nombre del archivo que leeremos */ public boolean recuperar (String lectura ) { try{ @SuppressWarnings("unchecked") Map<String, SortedSet<IPoblacion>> Aprovincias2 = (Map<String, SortedSet<IPoblacion>>) entrada.readObject(); System. out. println(Aprovincias2. entrySet()); e.printStackTrace(); } finally{ if(entrada!=null) try{ entrada.close(); System. out. println("Recuperado"); return true; e.printStackTrace(); } } return false; } /** * Clase para comparar las poblaciones por nombre * @author kikian * */ class porNombre implements Comparator<IPoblacion>{ @Override public int compare(IPoblacion o1, IPoblacion o2) { return o1.getNombre().compareTo(o2.getNombre()); } } /** * Obtiene el codigo AEMET asociado a la poblacion */ public String getCodigoAEMET () { // TODO Auto-generated method stub return null; } }
y para ver si funcionaba en la clase principal tengo esto: import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.Date; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Set; import java.text.SimpleDateFormat; 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 Controller controller; private AlmacenPoblaciones almacen; // private IAlmacenPoblaciones almacenPoblaciones; // private List listaPoblaciones; // private List listaPredicciones; /** * Constructor. * @throws GestorAEMETException */ public InterfazAWT_AEMET (String titulo, int ancho, int alto ) throws GestorAEMETException { super(titulo); controller = new Controller(this); setSize(ancho,alto); setLocationRelativeTo(null); setLayout ( new BorderLayout() ); // Layout de la aplicación, podría ser otro initComponents(); almacen = AlmacenPoblaciones.getInstance(); almacen.recuperar(FICHERO); System. out. println(almacen. getProvincias()); }//Constructor //List<IPrediccion> lista = null; /*try { lista = gestor.getPredicciones( poblacion ); poblacion.lista = lista; } catch( GestorAEMETException gae ) { System.out.println( gae.getMessage() ); }*/ 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() throws GestorAEMETException{ //Boton salir por defecto guardarAntesDeSalir (); } }); setMenuBar(addMenuBar()); } //Sitúo los menús desplegables // Creo el menú Archivo crearCargar.addActionListener(controller); crearGuardar.addActionListener(controller); salir.addActionListener(controller); menuArchivo.add(crearCargar); menuArchivo.add(crearGuardar); menuArchivo.add(salir); // Creo el menú Provincias Menu menuProvincias = new Menu("Provincias"); crearProvincias.addActionListener(controller); borrarProvincias.addActionListener(controller); menuProvincias.add(crearProvincias); menuProvincias.add(borrarProvincias); // Creo el menu Poblaciones Menu menuPoblaciones = new Menu("Poblaciones"); crearPoblacion.addActionListener(controller); borrarPoblacion.addActionListener(controller); ordenarNombre.addActionListener(controller); ordenarHabitantes.addActionListener(controller); modPoblacion.addActionListener(controller); movPoblacion.addActionListener(controller); menuPoblaciones.add(crearPoblacion); menuPoblaciones.add(borrarPoblacion); menuPoblaciones.add(ordenarNombre); menuPoblaciones.add(ordenarHabitantes); menuPoblaciones.add(modPoblacion); menuPoblaciones.add(movPoblacion); // Creo el menú de ayuda 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 lineaDeBotones. setBackground (Color. lightGray); //Boton crear provincia proCrear.addActionListener(controller); //Boton crear poblacion poCrear.addActionListener(controller); //Boton actualizar prediccion aPrediccion.addActionListener(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 for(int i =0; i==20;i++){ tProvincias.add("i"); } /*Iterator<String> i = almacen.getProvincias().iterator(); while(i.hasNext()){ tProvincias.add(i.next().toString()); }*/ izquierda.add(lProvincia); izquierda.add(tProvincias); izquierda.add(lPoblacion); izquierda.add(tPoblaciones); return izquierda; } private Panel addpredicciones (){ //Creamos el panel de las predicciones Label lPrediccion = new Label("Predicciones de :"); return predicciones; } private Panel addlineaEstado (){ //Sitúo la línea de estado lineaDeEstado. setBackground (Color. lightGray); Label ventanaDeeventos = new Label("Gestor AEMET v1.0 (PAA)"); lineaDeEstado.add (ventanaDeeventos); return lineaDeEstado; } private void guardarAntesDeSalir () { // Guardar almacen System. out. println ("Gracias por utilizar nuestro programa"); } /** * Clase que implementa la acción del menú "acerca de". */ VentanaAcercaDe ventanaAcercaDe = new VentanaAcercaDe(InterfazAWT_AEMET.this); ventanaAcercaDe.setVisible(true); } }//Acerca de //****Acciones menu archivo**** } }//Guardar en un fichero } }//Cargar desde un archivo //Ordena por nombre las poblaciones } } //Ordena por numero de habitantes las poblaciones } } //Modifica los valores de una poblacion } } //Mueve una poblacion de provincia } } //Accion actualizar prediccion } } /** * 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 al ejecutarlo se abre la ventana del programa y en eclipse me aparece esto: [Madrid=[Getafe,0,Madrid], Galicia=[], Gralicia=[], Graliscia=[], Garlicia=[]] Recuperado [] Gracias por utilizar nuestro programa por lo que si se recupera el archivo pero luego cuando hago System.out.println(almacen.getProvincias()); para ver si realmente esta ahi metido el almacen me dice que esta vacio, ya que el metodo recuperar solo muestra el que se ha recuperado y no lo mete en ningun sitio, ¿Como meto lo que leo del archivo a la instacia de almacenPoblaciones?
|
|
|
En línea
|
|
|
|
Usuario Invitado
Desconectado
Mensajes: 625
|
Investiga por tu cuenta tambié... Un poco más abajo en otros temas he puesto códigos para leer ficheros. Échales un vistazo y aplícalo a tu aplicación.
|
|
|
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
Mensajes: 66
|
Investiga por tu cuenta tambié... Un poco más abajo en otros temas he puesto códigos para leer ficheros. Échales un vistazo y aplícalo a tu aplicación.
tambien investigo por mi cuenta pero no entiendo la forma de hacerlo, el profesor nos dijo que habia que pasar los parametros por referencia para que el almacen de poblaciones se guardara correctamente pero he mirado y en java no se pueden pasar parametros por referencia, todos son por valor. Tambien sigo sin poder acceder a los botones crear y cancelar de provincias, se crea la ventana pero no hace nada al presionar.
|
|
|
En línea
|
|
|
|
Usuario Invitado
Desconectado
Mensajes: 625
|
En Java, NO EXISTE EL PASO DE PARÁMETROS POR REFERENCIA, TODO PASO ES POR VALOR, pero un "paso por valor" muy especial y es muy confuso entenderlo. Intentaré explicártelo (disculpa si lo hago más confuso ). Imaginemos el siguiente escenario: Tenemos una clase Dog: public class Dog { public Dog() { } this.name = name; } return name; } public void setName (String name ) { this.name = name; } }
Y el main: public class DogMain { public static void main (String[] args ) { Dog aDog = new Dog(); aDog.setName("Rex"); System. out. println("Nombre del perro: "+aDog. getName()); changeDogName(aDog); System. out. println("Nombre del perro: "+aDog. getName()); changeDogReference(aDog); System. out. println("Nombre del perro al terminar las operaciones: "+aDog. getName()); } public static void changeDogName(Dog sameDog) { sameDog.setName("Brutus"); System. out. println("Cambiado el nombre del perro a 'Brutus'"); } public static void changeDogReference(Dog sameDog) { sameDog = new Dog("Fury"); System. out. println("Nuevo nombre del perro: "+sameDog. getName()); } }
Ahora, analicemos que hace el código. 1. Crea un objeto tipo Dog llamado aDog. 2. Establece el nombre de aDog a "Rex". 3. Imprime el nombre del perro (Rex). 4. Llama al método changeDogName y se le pasa aDog. Dentro de changeDogName: 4.1 Cambia el nombre a aDog a "Brutus". 4.2 Informa que se ha cambiado el nombre de aDog a "Brutus". 5. Imprime el nombre de aDog (Brutus). 6. Llama al método changeDogReference y se le pasa aDog. Dentro de changeDogReference: 6.1 Instancia nuevamente aDog pasándole el nuevo nombre "Fury". 6.2 Informa que se ha cambiado el nombre de aDog a "Fury". 7. Imprime el nombre final del aDog. El resultado es "Brutus". Cuando le pasas un objeto por parámetro a un método, el objeto no pasa al método. Cuando pasas un objeto por parámetro a un método lo que ocurre es que se pasa es una copia de la dirección de memoria de dicho objeto. Por ende, no se puede modificar la referencia (dirección) no puede modificarse, pero sí se puede modificar los valores que engloba dicha referencia. Es por eso que cuando hacemos: public static void changeDogName(Dog sameDog) { sameDog.setName("Brutus"); System. out. println("Cambiado el nombre del perro a 'Brutus'"); }
Cambia el nombre de aDog sin problema alguno, porque puede acceder a los valores por medio de la copia de la dirección de memoria de aDog. Pero, ¿Qué pasa si volvemos a instanciar aDog dentro de un método? El resultado es que esa copia de la dirección de memoria de aDog recibe una nueva dirección de memoria al instanciar Dog, por lo que ahora es otro objeto tipo Dog. public static void changeDogReference(Dog sameDog) { sameDog = new Dog("Fury"); System. out. println("Nuevo nombre del perro: "+sameDog. getName()); }
Para comprobarlo, ejecutemos la prueba: Nombre del perro: Rex Cambiado el nombre del perro a 'Brutus' Nombre del perro: Brutus Nuevo nombre del perro: Fury Nombre del perro al terminar las operaciones: Brutus
Como ves, el paso de variables en Java es por VALOR y NO POR REFERENCIA. Puedes llevarle éste ejemplo a tu profesor, para que vea que está equivocado. Saludos.
|
|
|
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
Mensajes: 66
|
hola, ya he resuelto bastantes errores, puedo añadir y eliminar provincias perfectamente, ahora lo que necesito es que en la lista de provincias al pinchar en una, por ejemplo en madrid y darle al boton crear poblacion,me salga un frame en el que me diga que voy a añadir en la provincia madrid la poblacion xxxx, estoy utilizando el metodo lista.getSelectedItem() para saber que elemtno esta pinchado pero me salta null pointer exception y no se porque, mira: 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.WindowAdapter; import java.awt.event.WindowEvent; import principal.AlmacenPoblaciones; import principal.Aviso; public class VentanaCrearPoblacion extends Dialog { private AlmacenPoblaciones almacen; private List listaPoblaciones ; private List listaPredicciones ; private List listaProvincias ; 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.setTitle("Crear Poblacion"); this.setSize(300, 200); cancelar = new Button("Cancelar"); Label nombreP = new Label(listaProvincias. getSelectedItem()); 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); VentanaCrearPoblacion.this.dispose(); } }); } private VentanaCrearPoblacion gui; String label = e. getActionCommand(); if(label.equals("Crear")){ try{ Aviso aviso = new Aviso(gui,e1.getMessage()); } }else{ VentanaCrearPoblacion.this.dispose(); } } } }
he metido el controller dentro de la clase ventana por que me lo ha dicho el profesor
|
|
|
En línea
|
|
|
|
|
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,196
|
8 Marzo 2011, 17:56 pm
por XpandyX
|
|
|
Cerrar Frame al Abrir otro
Java
|
monsefoster
|
0
|
3,609
|
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
|
14,010
|
3 Junio 2011, 16:43 pm
por chelita
|
|
|
Facebook dentro de un frame.
Desarrollo Web
|
A2Corp
|
4
|
4,063
|
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,515
|
12 Junio 2012, 20:08 pm
por 79137913
|
|