Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - kikian94

#1
Java / Como paso datos entre varios jsp
22 Mayo 2015, 10:29 AM
hola, buenos dias, tengo que realizar una aplicacion para gestionar un almacen de provicncias y poblaciones:
<a href="http://imgur.com/v9ySUBS"><img src="http://i.imgur.com/v9ySUBS.png" title="source: imgur.com" /></a>
<a href="http://imgur.com/BekJHxd"><img src="http://i.imgur.com/BekJHxd.png" title="source: imgur.com" /></a>
<a href="http://imgur.com/jUepkrF"><img src="http://i.imgur.com/jUepkrF.png" title="source: imgur.com" /></a>
<a href="http://imgur.com/Sykcl38"><img src="http://i.imgur.com/Sykcl38.png" title="source: imgur.com" /></a>

de momento estoy con la pagina que muestra las provincias y poblaciones en una tabla, llevo esto:

Código (java) [Seleccionar]
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="almacen.*"%>
<%@ page language="java" import="java.io.*"%>
<%@ page language="java" import="paa.provincias.*"%>



<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
<head>
    <title>listaPoblaciones</title>
    <link rel="stylesheet" type="text/css" href="estilos.css" />
    <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />

</head>
<body>
<%@ page language="java"
contentType="text/html; harset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<div id="lista">
<%
AlmacenPoblaciones almacen = null;
boolean balmacen;
almacen = new AlmacenPoblaciones();
    String path = getServletConfig().getServletContext().getRealPath("");
balmacen = almacen.recuperar(path + "\\WEB-INF\\almacen.dat");
int numProvincias = almacen.getProvincias().size();
String direccion = "http://localhost:8080/practica3/listaPoblaciones.jsp?";
if(!balmacen){
System.out.println("No se ha cargado el almacen");
}
%>

<h1>Lista de provincias almacenadas</h1>
<h2>Se han recuperado <%=numProvincias%> provincias</h2>
<h3>Pulse sobre el nombre de la provincia para ver las poblaciones</h3>
<%
Set<String> listaProvincias = almacen.getProvincias();
String provincia;
System.out.println("listaProvincias");%>
<ul>
<%for(String a : listaProvincias){%>
<li> Provincias: <a href=<%=direccion%>> <%=a%></a></li>
<%}%>
</ul>
<%
Enumeration<String> nombres = request.getParameterNames();
    if(nombres.hasMoreElements()){
provincia = nombres.nextElement();
        SortedSet<IPoblacion> listaPoblaciones = almacen.getPoblaciones(provincia);
Iterator<IPoblacion> itr = listaPoblaciones.iterator();
Poblacion poblacion;
if(itr.hasNext()){%>
<table align=\center\>
<tr><th>Provincia</th><th>Población</th><th>Habitantes</th><th>Código</th><th>Operación</th></tr>
<%for(IPoblacion s : almacen.getPoblaciones(provincia)){
poblacion = (Poblacion) s;%>
<tr><td><%=poblacion.getProvincia()%></td><td><%=poblacion.getNombre()%></td><td><%=poblacion.getHabitantes()%></td><td><%=poblacion.getCodigoAEMET()%></td><td><a href=borrar.jsp>Borrar</a></td></tr>
<%}%>

</table>
<%}else{%>
<h2>No hay poblaciones en: <%=provincia%></h2>
<%}%>
<%}%>

</div>
</body>
</html>


el problema que tengo es que no se como borrar una poblacion, en el objeto almacen esta el metodo correspondiente al que hay que pasarle la poblacion y la provincia en la que la hay que borrar pero al ser un .jsp no se como debo de hacerlo, es posible saber si se ha pinchado en un href?, habia pensado en crear otro jsp al que le pase los datos pero no se como hacerlo y si seria correcto, alguna ayuda, gracias.
#2
Java / Poner iconos en JTable
17 Abril 2015, 15:22 PM
hola, quiero hacer una tabla para mostrar predicciones meteorologicas, la cual forma parte de una aplicacion:


pero a la hora de actualizar las predicciones queda asi:


lo curioso es que en el codigo del modelo:

Código (java) [Seleccionar]
package principal;

import java.util.Iterator;

import javax.swing.table.AbstractTableModel;

import paa.provincias.IPrediccion;

public class TableModel extends AbstractTableModel{

/**
*
*/
private static final long serialVersionUID = 1L;
String columnas[] = {"Fecha", "Temp. Mínima", "Temp. Máxima", "Icono","Estado del cielo"};
Object[][] data;
public java.util.List<IPrediccion> predicciones;

public TableModel() {
data = new Object[8][5];
int k = 0;
for(int j = 0; j<5; j++){
data[0][j] = columnas[k];
k++;
for(int i=1; i<8; i++){
data[i][j] = new String("*");
}
}
}

public int getColumnCount() {
return columnas.length;
}

@Override
public int getRowCount() {
return data.length;
}

@Override
public Object getValueAt(int row, int col) {

return data[row][col];
}

public String getColumnName(int col){
return columnas[col];
}

public Class getColumnClass(int c){
return getValueAt(0,c).getClass();
}

//public boolean isCellEditable(int row,int col){}
public void setValueAt(Object value, int row, int col){
data[row][col] = value;
fireTableCellUpdated(row,col);
}

public void rellenar(java.util.List<IPrediccion> prediccion){
Iterator<IPrediccion> it;
it = prediccion.iterator();

int i = 1; // si pongo 1 salen imagenes, si pongo 0 salen string wtf?
int j;
while (it.hasNext()){
//Recorremos la lista y colocamos en las celdas de cada fila los datos de las predicciones
IPrediccion pre = it.next();
j=0;
setValueAt(pre.getFecha(), i, j);
j++;
setValueAt(pre.getTemperaturaMinima(), i, j);
j++;
setValueAt(pre.getTemperaturaMaxima(), i, j);
j++;
setValueAt(pre.getIconoEstadoCielo(), i, j);
j++;
setValueAt(pre.getEstadoCielo(), i, j);
j++;
i++;
}
}


}


y me da esto cuando pongo i a 1:


lo cual es como deberia de estar pero desplazado una fila hacia debajo, alguien sabe donde esta el error?
#3
Tengo problemas para actualizar el jtree no se como hacerlo, utilizo reload pero no se actualiza, las provincias y poblaciones se guardan pero el jtree ni se inmuta, y otra cosa en la tabla, como actualizo los datos?, por que el metodo para actualizarlos que es setValueAt esta inplementado dentro del tablemodel, no dentro de la tabla,

principal:

Código (java) [Seleccionar]
package principal;
import java.awt.*;
import java.awt.event.*;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreeSelectionModel;

import Poblacion.VentanaBorrarPoblacion;
import Poblacion.VentanaCrearPoblacion;
import paa.provincias.GestorAEMET;
import paa.provincias.GestorAEMETException;
import paa.provincias.IPoblacion;
import paa.provincias.IPrediccion;


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

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

// private IAlmacenPoblaciones almacenPoblaciones;

private java.util.List<IPrediccion> listaPredicciones;
private InterfazAWT_AEMET gui;
private GestorAEMET gestor = new GestorAEMET();
private JTree tree;
private JTree treeDatos;
private DefaultTreeModel modeloArbol;
private DefaultTreeModel modelo;
private DefaultMutableTreeNode selectedNode;
private String nombrePoblacion;
private JTable tabla;
private TableModel d;
/**
* Constructor.
*
* @throws GestorAEMETException
*/
public InterfazAWT_AEMET(String titulo, int ancho, int alto) {
super(titulo);
setSize(ancho, alto);
setLocationRelativeTo(null);
setLayout(new BorderLayout()); // Layout de la aplicación, podría ser otro
almacen = RecuperarAlmacenPoblaciones();
initComponents();
JFrame.setDefaultLookAndFeelDecorated(true);
}

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

if (almacenPoblaciones1.recuperar(FICHERO)){
Icon icono= new ImageIcon(getClass().getResource("/iconos/check.png"));
JOptionPane.showMessageDialog(null, "Recuperado el almacen del fichero " + FICHERO, "Recuperado",JOptionPane.INFORMATION_MESSAGE,icono);
}else{
JOptionPane.showMessageDialog(null, "No se ha podido recuperar el almacen del fichero" + FICHERO, "Error",JOptionPane.ERROR_MESSAGE);

}return almacenPoblaciones1;

}

public void initComponents() {
// Boton salir por defecto
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setJMenuBar(addJMenuBar());
this.add(addJToolBar(), BorderLayout.NORTH);
this.add(addlineaEstado(), BorderLayout.SOUTH);
  //Creamos el splitpanel y lo colocamos en medio del jtree y la tabla, despues lo añadimos al Jframe
    JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,addPanelIzquierda(),addpredicciones());
    splitPane.setOneTouchExpandable(true);
    splitPane.setDividerLocation(100);
    splitPane.setDividerSize(10);
    this.add(splitPane,BorderLayout.CENTER);
}

private JMenuBar addJMenuBar() {
// Sitúo los menús desplegables
JMenuBar barraDeMenu = new JMenuBar();
// Creo el menú Archivo
JMenu menuArchivo = new JMenu("Archivo");
JMenuItem crearGuardar = new JMenuItem("Guardar");
JMenuItem crearCargar = new JMenuItem("Cargar");
JMenuItem salir = new JMenuItem("Salir");
crearCargar.addActionListener(new Controller());
crearGuardar.addActionListener(new Controller());
salir.addActionListener(new Controller());
menuArchivo.add(crearCargar);
menuArchivo.add(crearGuardar);
menuArchivo.add(salir);

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

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

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

// Crea el
barraDeMenu.add(menuArchivo);
barraDeMenu.add(menuProvincias);
barraDeMenu.add(menuPoblaciones);
barraDeMenu.add(ayuda);
return barraDeMenu;
}

private JToolBar addJToolBar() {
// Sitúo la línea de botones
JToolBar lineaDeBotones = new JToolBar();
lineaDeBotones.setBackground(new Color(200,100,100));

// Boton crear provincia
Icon Iprovincia= new ImageIcon(getClass().getResource("/iconos/provincia.png"));
JButton proCrear = new JButton("Crear provincia",Iprovincia);
proCrear.addActionListener(new Controller());

// Boton crear poblacion
Icon Ipoblacion= new ImageIcon(getClass().getResource("/iconos/poblacion.png"));
JButton poCrear = new JButton("Crear poblacion",Ipoblacion);
poCrear.addActionListener(new Controller());

// Boton actualizar prediccion
Icon actualizar= new ImageIcon(getClass().getResource("/iconos/actualizar.png"));

JButton aPrediccion = new JButton("Actualizar Predicción",actualizar);
aPrediccion.setToolTipText("Click para actualizar las predicciones");
aPrediccion.addActionListener(new Controller());

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

private JTree addPanelIzquierda() {
        // Construccion de los datos del arbol y del arbol
        CrearArbol();
        //Creamos el listener del JTree
        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        tree.addTreeSelectionListener(new TreeSelectionListener(){
@Override
public void valueChanged(TreeSelectionEvent se) {
treeDatos = (JTree) se.getSource();
selectedNode = (DefaultMutableTreeNode) treeDatos.getLastSelectedPathComponent();
    nombrePoblacion = selectedNode.toString();
    if (selectedNode.isLeaf()) {
      System.out.println(nombrePoblacion);
      System.out.println(selectedNode.getParent().toString());
    }
}
        });
        tree.setBorder(BorderFactory.createLineBorder(Color.blue));
       
return tree;
}

public void CrearArbol(){
DefaultMutableTreeNode provinciasPrincipal = new DefaultMutableTreeNode("Provincias");
modelo = new DefaultTreeModel(provinciasPrincipal);
    tree = new JTree(modelo);
for(String s : almacen.getProvincias()){
        int j = 0;
        DefaultMutableTreeNode provincia = new DefaultMutableTreeNode(s);
        modelo.insertNodeInto(provincia, provinciasPrincipal, j);
        j++;
        for(IPoblacion i : almacen.getPoblaciones(s)){
        int x = 0;
        DefaultMutableTreeNode poblacion = new DefaultMutableTreeNode(i.getNombre());
        modelo.insertNodeInto(poblacion, provincia, x);
        x++;
        }
        }

}

private JPanel addpredicciones() {
// Creamos la tabla de las predicciones
JPanel predicciones = new JPanel(new BorderLayout());
d = new TableModel();
tabla = new JTable(d);
JLabel lPrediccion = new JLabel("Predicciones de :");
//predicciones.add(lPrediccion, BorderLayout.NORTH);
predicciones.add(lPrediccion,BorderLayout.NORTH);
predicciones.add(tabla,BorderLayout.CENTER);
predicciones.setBackground(Color.white);
predicciones.setBorder(BorderFactory.createLineBorder(Color.blue));
return predicciones;
}

private JPanel addlineaEstado() {
// Sitúo la línea de estado
JPanel lineaDeEstado = new JPanel();
lineaDeEstado.setLayout(new FlowLayout(FlowLayout.LEFT));
lineaDeEstado.setBackground(new Color(0,80,80));
JLabel ventanaDeeventos = new JLabel("Gestor AEMET v2.0 (PAA)",SwingConstants.CENTER);
ventanaDeeventos.setForeground(new Color(200,200,60));
ventanaDeeventos.setHorizontalAlignment(SwingConstants.CENTER);
ventanaDeeventos.setVerticalAlignment(SwingConstants.CENTER);
lineaDeEstado.add(ventanaDeeventos);
return lineaDeEstado;
}

private void guardarAntesDeSalir() {

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

class Controller implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String nombre = e.getActionCommand();
EvaluarAccion(nombre);
}

public void EvaluarAccion(String accion) {

switch (accion) {
case "Guardar":
almacen.guardar(FICHERO);
JOptionPane.showMessageDialog(null, "El almacen ha sido guardado", "Guardado", DISPOSE_ON_CLOSE);
break;
case "Cargar":
almacen = RecuperarAlmacenPoblaciones();
break;
case "Salir":
System.exit(0);
break;
case "Crear provincia":
String crearProvincia = JOptionPane.showInputDialog(null,"Provincia:","Nueva provincia",JOptionPane.QUESTION_MESSAGE);
if((crearProvincia != null)&&(!crearProvincia.equals(""))){
almacen.addProvincia(crearProvincia);
CrearArbol();
modelo.reload();
}else{
JOptionPane.showMessageDialog(null, "Error al crear provincia", "Error", DISPOSE_ON_CLOSE);
}
break;
case "Borrar provincia":
String borrarProvincia = JOptionPane.showInputDialog(null,"Provincia:","Eliminar provincia",JOptionPane.QUESTION_MESSAGE);
if((borrarProvincia != null)&&(!borrarProvincia.equals(""))){
almacen.delProvincia(borrarProvincia);
CrearArbol();
}else{
JOptionPane.showMessageDialog(null, "Error al borrar provincia", "Error", DISPOSE_ON_CLOSE);
}
break;
case "Crear poblacion":
new VentanaCrearPoblacion(gui,almacen).setVisible(true);
CrearArbol();
break;
case "Borrar poblacion":
new VentanaBorrarPoblacion(gui,almacen).setVisible(true);
CrearArbol();
break;
case "Ordenar por nombre":
break;
case "Ordenar por habitantes":
break;
case "Modificar poblacion":
break;
case "Mover poblacion":
break;
case "Actualizar Predicción":
try {
Poblacion poblacion = (Poblacion) almacen.getPoblacion(selectedNode.getParent().toString(), nombrePoblacion);
System.out.println(poblacion.getCodigoAEMET());
if(poblacion.getPrediccion()==null){
listaPredicciones = gestor.getPredicciones( poblacion );
poblacion.lista = listaPredicciones;
}else{

}
} catch( NullPointerException | GestorAEMETException gae ) {
JOptionPane.showMessageDialog(null, gae, "Error", DISPOSE_ON_CLOSE);

}


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

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

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



tablemodel:

Código (java) [Seleccionar]
package principal;

import java.util.Iterator;

import javax.swing.table.AbstractTableModel;

import paa.provincias.IPrediccion;

public class TableModel extends AbstractTableModel{

/**
*
*/
private static final long serialVersionUID = 1L;
String columnas[] = {"Fecha", "Temp. Mínima", "Temp. Máxima", "Icono","Estado del cielo"};
Object[][] data;
public java.util.List<IPrediccion> predicciones;

public TableModel() {
data = new Object[7][5];
for(int i = 0; i < 7; i++ ){
for(int j = 0; j < 5;j++){
data[i][j] = new String("*");
}
}
}

@Override
public int getColumnCount() {
return columnas.length;
}

@Override
public int getRowCount() {
return data.length;
}

@Override
public Object getValueAt(int row, int col) {

return data[row][col];
}

@Override
public String getColumnName(int col){
return columnas[col];
}

@Override
public Class getColumnClass(int c){
return getValueAt(0,c).getClass();
}

//public boolean isCellEditable(int row,int col){}
@Override
public void setValueAt(Object value, int row, int col){
data[row][col] = value;
fireTableCellUpdated(row,col);
}

private void printDebugData() {
int numRows = getRowCount();
    int numCols = getColumnCount();

    for (int i = 0; i < numRows; i++) {
      System.out.print("    row " + i + ":");
      for (int j = 0; j < numCols; j++) {
        System.out.print("  " + data[i][j]);
      }
      System.out.println();
    }
    System.out.println("--------------------------");
}

public void rellenar(java.util.List<IPrediccion> prediccion){
Iterator<IPrediccion> it;
it = prediccion.iterator();

int i = 0;
int j;
while (it.hasNext()){
//Recorremos la lista y colocamos en las celdas de cada fila los datos de las predicciones
IPrediccion pre = it.next();
j=0;
setValueAt(pre.getFecha(), i, j);
j++;
setValueAt(pre.getTemperaturaMinima(), i, j);
j++;
setValueAt(pre.getTemperaturaMaxima(), i, j);
j++;
setValueAt(pre.getIconoEstadoCielo(), i, j);
j++;
setValueAt(pre.getEstadoCielo(), i, j);
j++;
i++;
}
}


}
#4
he conseguido solucionar el problema del jsplit y ya funciona, ahora viene lo que me queda, la tabla, la cual me esta dando muchos quebraderos de cabeza, tengo esto:


y tengo que llegar a esto:



y ahora explico como debe de hacerse:

El boton actualizar prediccion ha de utilizar un paquete .jar que nos dan pedefinido y en el cual hay 2 metodos necesarios, el primero, getPredicciones que me devuelve una lista de las predicciones con una semana de margen, las cuales tengo que colocar en cada casilla de la tabla al darle al boton actualizar y ademas colocar el icono del tiempo en funcion de la prediccion que tambien viene dado por el metodo getIcono.


pero hay un pero y es que si ya se ha dado al boton actualizar y se vuelve a pulsar debe de mostrar la tabla que ya habia la primera vez y no volver a actualizar ya que al no haber datos que actualizar seria un malgasto de internet, solo debe de actuar el boton actualizar cuando haya pasado el tiempo suficiente para que haya nuevas predicciones, es decir 1 dia.

hasta aqui lo que debe de hacer, tengo todo pero la tabla no consigo hacerla, para empezar no soy capaz de dibujar los nombres de las columnas, he copiado el codigo de las columnas predefinido para probar pero no se como voy a meter en la tabla los datos de las predicciones y el icono, pongo el codigo que tengo hasta ahora:

clase principal:
Código (java) [Seleccionar]
package principal;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;

import Poblacion.VentanaBorrarPoblacion;
import Poblacion.VentanaCrearPoblacion;
import paa.provincias.GestorAEMET;
import paa.provincias.GestorAEMETException;
import paa.provincias.IPoblacion;
import paa.provincias.IPoblacionAEMET;
import paa.provincias.IPrediccion;


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

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

// private IAlmacenPoblaciones almacenPoblaciones;
private List listaPoblaciones = new List();
private List listaPredicciones = new List();
private List listaProvincias = new List();
private InterfazAWT_AEMET gui;
private GestorAEMET gestor = new GestorAEMET();
private JTree tree;
private JPanel panel;
private JTable tabla;
/**
* Constructor.
*
* @throws GestorAEMETException
*/
public InterfazAWT_AEMET(String titulo, int ancho, int alto) {
super(titulo);
setSize(ancho, alto);
setLocationRelativeTo(null);
setLayout(new BorderLayout()); // Layout de la aplicación, podría ser otro
almacen = RecuperarAlmacenPoblaciones();
initComponents();
JFrame.setDefaultLookAndFeelDecorated(true);
}

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

if (almacenPoblaciones1.recuperar(FICHERO)){
Icon icono= new ImageIcon(getClass().getResource("/iconos/check.png"));
JOptionPane.showMessageDialog(null, "Recuperado el almacen del fichero " + FICHERO, "Recuperado",JOptionPane.INFORMATION_MESSAGE,icono);
}else{
JOptionPane.showMessageDialog(null, "No se ha podido recuperar el almacen del fichero" + FICHERO, "Error",JOptionPane.ERROR_MESSAGE);

}return almacenPoblaciones1;

}

public void initComponents() {
// Boton salir por defecto
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setJMenuBar(addJMenuBar());
this.add(addJToolBar(), BorderLayout.NORTH);
this.add(addlineaEstado(), BorderLayout.SOUTH);
  //Creamos el splitpanel y lo colocamos en medio del jtree y la tabla, despues lo añadimos al Jframe
    JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,addPanelIzquierda(),addpredicciones());
    splitPane.setOneTouchExpandable(true);
    splitPane.setDividerLocation(100);
    splitPane.setDividerSize(10);
    this.add(splitPane,BorderLayout.CENTER);
}

private JMenuBar addJMenuBar() {
// Sitúo los menús desplegables
JMenuBar barraDeMenu = new JMenuBar();
// Creo el menú Archivo
JMenu menuArchivo = new JMenu("Archivo");
JMenuItem crearGuardar = new JMenuItem("Guardar");
JMenuItem crearCargar = new JMenuItem("Cargar");
JMenuItem salir = new JMenuItem("Salir");
crearCargar.addActionListener(new Controller());
crearGuardar.addActionListener(new Controller());
salir.addActionListener(new Controller());
menuArchivo.add(crearCargar);
menuArchivo.add(crearGuardar);
menuArchivo.add(salir);

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

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

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

// Crea el
barraDeMenu.add(menuArchivo);
barraDeMenu.add(menuProvincias);
barraDeMenu.add(menuPoblaciones);
barraDeMenu.add(ayuda);
return barraDeMenu;
}

private JToolBar addJToolBar() {
// Sitúo la línea de botones
JToolBar lineaDeBotones = new JToolBar();
lineaDeBotones.setBackground(new Color(200,100,100));

// Boton crear provincia
Icon Iprovincia= new ImageIcon(getClass().getResource("/iconos/provincia.png"));
JButton proCrear = new JButton("Crear provincia",Iprovincia);
proCrear.addActionListener(new Controller());

// Boton crear poblacion
Icon Ipoblacion= new ImageIcon(getClass().getResource("/iconos/poblacion.png"));
JButton poCrear = new JButton("Crear poblacion",Ipoblacion);
poCrear.addActionListener(new Controller());

// Boton actualizar prediccion
Icon actualizar= new ImageIcon(getClass().getResource("/iconos/actualizar.png"));

JButton aPrediccion = new JButton("Actualizar Predicción",actualizar);
aPrediccion.setToolTipText("Click para actualizar las predicciones");
aPrediccion.addActionListener(new Controller());

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

private JPanel addPanelIzquierda() {
// Construccion del arbol
        DefaultMutableTreeNode provinciasPrincipal = new DefaultMutableTreeNode("Provincias");
        DefaultTreeModel modelo = new DefaultTreeModel(provinciasPrincipal);
        tree = new JTree(modelo);
        panel = new JPanel();
        // Construccion de los datos del arbol
       
        for(String s : almacen.getProvincias()){
        int j = 0;
        DefaultMutableTreeNode provincia = new DefaultMutableTreeNode(s);
        modelo.insertNodeInto(provincia, provinciasPrincipal, j);
        j++;
        for(IPoblacion i : almacen.getPoblaciones(s)){
        int x = 0;
        DefaultMutableTreeNode poblacion = new DefaultMutableTreeNode(i.getNombre());
        modelo.insertNodeInto(poblacion, provincia, x);
        x++;
        }
        }
        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        tree.addTreeSelectionListener(new TreeSelectionListener(){
@Override
public void valueChanged(TreeSelectionEvent se) {
JTree tree = (JTree) se.getSource();
    DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    String selectedNodeName = selectedNode.toString();
    if (selectedNode.isLeaf()) {
      System.out.println(selectedNodeName);
    }
}
        });
        panel.setBorder(BorderFactory.createLineBorder(Color.blue));
        panel.add(tree);
       
        panel.setBackground(Color.WHITE);
return panel;
}

private JPanel addpredicciones() {
// Creamos la tabla de las predicciones
JPanel predicciones = new JPanel(new BorderLayout());
String columnas[] = {"Fecha", "Temp. Mínima", "Temp. Máxima", "Icono","Estado del cielo"};
Object[][] data = {
    {"Kathy", "Smith",
        "Snowboarding", new Integer(5), new Boolean(false)},
       {"John", "Doe",
        "Rowing", new Integer(3), new Boolean(true)},
       {"Sue", "Black",
        "Knitting", new Integer(2), new Boolean(false)},
       {"Jane", "White",
        "Speed reading", new Integer(20), new Boolean(true)},
       {"Joe", "Brown",
        "Pool", new Integer(10), new Boolean(false)}
   };


TableModel d = new TableModel(data,columnas);
tabla = new JTable(d);
JLabel lPrediccion = new JLabel("Predicciones de :");
//predicciones.add(lPrediccion, BorderLayout.NORTH);
predicciones.add(lPrediccion,BorderLayout.NORTH);
predicciones.add(tabla,BorderLayout.CENTER);
predicciones.setBackground(Color.white);
predicciones.setBorder(BorderFactory.createLineBorder(Color.blue));
return predicciones;
}

private JPanel addlineaEstado() {
// Sitúo la línea de estado
JPanel lineaDeEstado = new JPanel();
lineaDeEstado.setLayout(new FlowLayout(FlowLayout.LEFT));
lineaDeEstado.setBackground(new Color(0,80,80));
JLabel ventanaDeeventos = new JLabel("Gestor AEMET v2.0 (PAA)",SwingConstants.CENTER);
ventanaDeeventos.setForeground(new Color(200,200,60));
ventanaDeeventos.setHorizontalAlignment(SwingConstants.CENTER);
ventanaDeeventos.setVerticalAlignment(SwingConstants.CENTER);
lineaDeEstado.add(ventanaDeeventos);
return lineaDeEstado;
}

private void guardarAntesDeSalir() {

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

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

public void EvaluarAccion(String accion) {

switch (accion) {
case "Guardar":
almacen.guardar(FICHERO);
JOptionPane.showMessageDialog(null, "El almacen ha sido guardado", "Guardado", DISPOSE_ON_CLOSE);
break;
case "Cargar":
almacen = RecuperarAlmacenPoblaciones();
break;
case "Salir":
System.exit(0);
break;
case "Crear provincia":
String crearProvincia = JOptionPane.showInputDialog(null,"Provincia:","Nueva provincia",JOptionPane.QUESTION_MESSAGE);
if((crearProvincia != null)&&(!crearProvincia.equals(""))){
almacen.addProvincia(crearProvincia);
}else{
JOptionPane.showMessageDialog(null, "Error al crear provincia", "Error", DISPOSE_ON_CLOSE);
}
break;
case "Borrar provincia":
String borrarProvincia = JOptionPane.showInputDialog(null,"Provincia:","Eliminar provincia",JOptionPane.QUESTION_MESSAGE);
if((borrarProvincia != null)&&(!borrarProvincia.equals(""))){
almacen.delProvincia(borrarProvincia);
}else{
JOptionPane.showMessageDialog(null, "Error al borrar provincia", "Error", DISPOSE_ON_CLOSE);
}
break;
case "Crear poblacion":
new VentanaCrearPoblacion(gui,almacen).setVisible(true);
break;
case "Borrar poblacion":
new VentanaBorrarPoblacion(gui,almacen).setVisible(true);
break;
case "Ordenar por nombre":
break;
case "Ordenar por habitantes":
break;
case "Modificar poblacion":
break;
case "Mover poblacion":
break;
case "Actualizar Predicción":
IPoblacion poblacion = almacen.getPoblacion(listaProvincias.getSelectedItem(), listaPoblaciones.getSelectedItem());
try {
listaPredicciones.removeAll();
for(IPrediccion p : gestor.getPredicciones((IPoblacionAEMET) poblacion)){
listaPredicciones.add(p.getFecha() + " : " + p.getEstadoCielo() + " : " +
p.getTemperaturaMaxima() + " : " + p.getTemperaturaMinima());
}
} catch (GestorAEMETException e) {
new Aviso(gui,e.getMessage());
}
break;
case "Acerca de" :
new VentanaAcercaDe(gui);
break;
}
}
}




class TableModel extends AbstractTableModel{

String columnas[] = {"Fecha", "Temp. Mínima", "Temp. Máxima", "Icono","Estado del cielo"};
Object[][] data;
public boolean cellEditable = false;
public java.util.List<IPrediccion> dataArray = null;

public TableModel(Object[][] data2, String[] columnas2) {
data = data2;
columnas = columnas2;
}

public int getColumnCount() {
return columnas.length;
}

@Override
public int getRowCount() {
return data.length;
}

@Override
public Object getValueAt(int arg0, int arg1) {

return data[arg0][arg1];
}

public void setValueAt(Object value, int row, int col){
data[row][col] = value;
fireTableCellUpdated(row,col);
}

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

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

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


clase prediccion:

Código (java) [Seleccionar]
package principal;
import javax.swing.ImageIcon;

import paa.provincias.IPrediccion;

public class Prediccion implements IPrediccion {

private String estadoCielo;
private String fecha;
private String poblacion;
private String provincia;
private String temperaturaMaxima;
private String temperaturaMinima;
private ImageIcon icono;

public Prediccion() {

}

public String getEstadoCielo() {
return estadoCielo;
}

public String getFecha() {
return fecha;
}

public String getPoblacion() {
return poblacion;
}

public String getProvincia() {
return provincia;
}

public String getTemperaturaMaxima() {
return temperaturaMaxima;
}

public String getTemperaturaMinima() {
return temperaturaMinima;
}

public String toString(){
return fecha + " : " + estadoCielo + " : " + temperaturaMaxima + " : " + temperaturaMinima;

}

public ImageIcon getIconoEstadoCielo() {
return icono;
}

}


clase poblacion

Código (java) [Seleccionar]
package principal;
import java.io.Serializable;
import java.util.List;

import paa.provincias.IPoblacion;
import paa.provincias.IPoblacionAEMET;
import paa.provincias.IPrediccion;

/**
* Clase que modela una poblacion con nombre,numero de habitantes y provicnia
* asociada
*
* @author kikian
*
*/
public class Poblacion implements IPoblacion, Comparable<Poblacion>,
Serializable, IPoblacionAEMET {

/**
*
*/
private static final long serialVersionUID = 1L;
private String nombre;
private int habitantes;
private String provincia;
private String codigoAEMET;
public List<IPrediccion> lista = null;

/**
* Crea una poblacion con los valores que se le pasan como parametros
*
* @param nombre
*            - nombre de la poblacion
* @param habitantes
*            - Numero de habitantes
* @param provincia
*            - provincia a la que pertenece la poblacion
*/
public Poblacion(String nombre, int habitantes, String provincia,
String codigoAEMET) {
this.nombre = nombre;
this.habitantes = habitantes;
this.provincia = provincia;
this.codigoAEMET = codigoAEMET;
}

/**
* Crea una poblacion a partir del codigo AEMET
*
* @param codigoAEMET
*/
public Poblacion(String codigoAEMET) {
this.codigoAEMET = codigoAEMET;
}

/**
* Devuelve el número de habitantes de la población
*/
public int getHabitantes() {
return habitantes;
}

/**
* Devuelve el nombre de la población
*/
public String getNombre() {
return nombre;
}

/**
* Devuelve la provincia a la que pertenece la población
*/
public String getProvincia() {
return provincia;
}

/**
* Actualiza el número de habitantes de la población
*
* @param habitantes
*            - habitantes que tiene la poblacion
*/
public void setHabitantes(int habitantes) {
this.habitantes = habitantes;
}

/**
* Actualiza el nombre de la población
*
* @param nombre
*            -nombre que tendra la poblacion
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}

/**
* Actualiza la provincia a la que pertenece la población
*
* @param provincia
*            - Provincia a la que cambiaremos la poblacion
*/
public void setProvincia(String provincia) {
this.provincia = provincia;
}

/**
* Devuelve un string con la informacion de la poblacion
*/
public String toString() {
return this.nombre + "," + this.habitantes + "," + this.provincia;
}

/**
* Metodo para comparar las poblaciones y ordenarlas por defecto por el
* nombre de la poblacion
*
* @param arg0
*            - poblacion que vamos a comparar
*/
public int compareTo(Poblacion arg0) {
int res = 0;
if (arg0 == null) {
throw new NullPointerException();
} else {
res = this.nombre.compareTo(arg0.nombre);
return res;
}
}

@Override
public String getCodigoAEMET() {
return codigoAEMET;
}

public void setPrediccion(List<IPrediccion> lista){
this.lista = lista;
}

public List<IPrediccion> getPrediccion(){
return lista;
}
}


clase almacenpoblaciones

Código (java) [Seleccionar]
package principal;
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;

/**
* 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) {
ObjectOutputStream salida = null;
try {
salida = new ObjectOutputStream(new FileOutputStream(escritura));
salida.writeObject(Aprovincias);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (salida != null)
try {
salida.close();
System.out.println("Guardado");
return true;
} catch (IOException e) {
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
*/
@SuppressWarnings("unchecked")
public boolean recuperar(String lectura) {
ObjectInputStream entrada = null;
try {
entrada = new ObjectInputStream(new FileInputStream(lectura));

Aprovincias = (Map<String, SortedSet<IPoblacion>>) entrada
.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (entrada != null)
try {
entrada.close();
return true;
} catch (IOException e) {
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;
}

}


las demas clases son las correspondientes a las ventanas auxiliares y estan correctamente, a ver si alguno me podeis hechar una mano, muchas gracias
#5
hola, estoy diseñando una aplicacion en swing que se tiene que conectar a la AEMET y descargar los datos de las poblaciones que previamente se le han añadido, el problema que tengo es con los componentes.
En primer lugar este es el codigo:
Código (java) [Seleccionar]
package principal;
import java.awt.*;
import java.awt.event.*;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import Poblacion.VentanaBorrarPoblacion;
import Poblacion.VentanaCrearPoblacion;
import paa.provincias.GestorAEMET;
import paa.provincias.GestorAEMETException;
import paa.provincias.IPoblacion;
import paa.provincias.IPoblacionAEMET;
import paa.provincias.IPrediccion;


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

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

// private IAlmacenPoblaciones almacenPoblaciones;
private List listaPoblaciones = new List();
private List listaPredicciones = new List();
private List listaProvincias = new List();
private InterfazAWT_AEMET gui;
private GestorAEMET gestor = new GestorAEMET();
private Aviso aviso;
/**
* Constructor.
*
* @throws GestorAEMETException
*/
public InterfazAWT_AEMET(String titulo, int ancho, int alto) {
super(titulo);
setSize(ancho, alto);
setLocationRelativeTo(null);
setLayout(new BorderLayout()); // Layout de la aplicación, podría ser otro
almacen = RecuperarAlmacenPoblaciones();
initComponents();
JFrame.setDefaultLookAndFeelDecorated(true);
}

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

if (almacenPoblaciones1.recuperar(FICHERO)){
Icon icono= new ImageIcon(getClass().getResource("/iconos/check.png"));
JOptionPane.showMessageDialog(null, "Recuperado el almacen del fichero " + FICHERO, "Recuperado",JOptionPane.INFORMATION_MESSAGE,icono);
}else{
JOptionPane.showMessageDialog(null, "No se ha podido recuperar el almacen del fichero" + FICHERO, "Error",JOptionPane.ERROR_MESSAGE);

}return almacenPoblaciones1;

}

private void initComponents() {

// Boton salir por defecto
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setJMenuBar(addJMenuBar());
this.add(addJToolBar(), BorderLayout.NORTH);
this.add(addlineaEstado(), BorderLayout.SOUTH);
this.add(addPanelIzquierda(), BorderLayout.WEST);
  //Create a split pane with the two scroll panes in it.
    JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,addPanelIzquierda(),addpredicciones());
    splitPane.setDividerLocation(150);
    splitPane.setDividerSize(10);
    splitPane.setOneTouchExpandable(true);
   
/*
    // Provide minimum sizes for the two components in the split pane
    Dimension minimumSize = new Dimension(100, 50);
    addPanelIzquierda().setMinimumSize(minimumSize);
    addpredicciones().setMinimumSize(minimumSize);

    // Set the initial location and size of the divider
   

    // Provide a preferred size for the split pane
    splitPane.setPreferredSize(new Dimension(400, 200));*/
this.add(addpredicciones(), BorderLayout.CENTER);
}

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

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

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

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

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

// Crea el
barraDeMenu.add(menuArchivo);
barraDeMenu.add(menuProvincias);
barraDeMenu.add(menuPoblaciones);
barraDeMenu.add(ayuda);
return barraDeMenu;
}

private JToolBar addJToolBar() {
// Sitúo la línea de botones
JToolBar lineaDeBotones = new JToolBar();
lineaDeBotones.setBackground(new Color(200,100,100));

// Boton crear provincia
Icon Iprovincia= new ImageIcon(getClass().getResource("/iconos/provincia.png"));
JButton proCrear = new JButton("Crear provincia",Iprovincia);
proCrear.addActionListener(new Controller());

// Boton crear poblacion
Icon Ipoblacion= new ImageIcon(getClass().getResource("/iconos/poblacion.png"));
JButton poCrear = new JButton("Crear poblacion",Ipoblacion);
poCrear.addActionListener(new Controller());

// Boton actualizar prediccion
Icon actualizar= new ImageIcon(getClass().getResource("/iconos/actualizar.png"));

JButton aPrediccion = new JButton("Actualizar Predicción",actualizar);
aPrediccion.setToolTipText("Click para actualizar las predicciones");
aPrediccion.addActionListener(new Controller());

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

private JTree addPanelIzquierda() {
// Construccion del arbol
        DefaultMutableTreeNode provinciasPrincipal = new DefaultMutableTreeNode("Provincias");
        DefaultTreeModel modelo = new DefaultTreeModel(provinciasPrincipal);
        JTree tree = new JTree(modelo);

        // Construccion de los datos del arbol
       
        for(String s : almacen.getProvincias()){
        int j = 0;
        DefaultMutableTreeNode provincia = new DefaultMutableTreeNode(s);
        modelo.insertNodeInto(provincia, provinciasPrincipal, j);
        j++;
        for(IPoblacion i : almacen.getPoblaciones(s)){
        int x = 0;
        DefaultMutableTreeNode poblacion = new DefaultMutableTreeNode(i.getNombre());
        modelo.insertNodeInto(poblacion, provincia, x);
        x++;
        }
        }
return tree;
}

private JPanel addpredicciones() {
// Creamos el panel de las predicciones
JPanel predicciones = new JPanel(new BorderLayout());
JLabel lPrediccion = new JLabel("Predicciones de :");
predicciones.add(lPrediccion, BorderLayout.NORTH);
predicciones.add(listaPredicciones, BorderLayout.CENTER);
return predicciones;
}

private JPanel addlineaEstado() {
// Sitúo la línea de estado
JPanel lineaDeEstado = new JPanel();
lineaDeEstado.setLayout(new FlowLayout(FlowLayout.LEFT));
lineaDeEstado.setBackground(new Color(0,80,80));
JLabel ventanaDeeventos = new JLabel("Gestor AEMET v2.0 (PAA)",SwingConstants.CENTER);
ventanaDeeventos.setForeground(new Color(200,200,60));
ventanaDeeventos.setHorizontalAlignment(SwingConstants.CENTER);
ventanaDeeventos.setVerticalAlignment(SwingConstants.CENTER);
lineaDeEstado.add(ventanaDeeventos);
return lineaDeEstado;
}

private void guardarAntesDeSalir() {

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

class Controller implements ActionListener {

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

}

public void EvaluarAccion(String accion) {

switch (accion) {
case "Guardar":
almacen.guardar(FICHERO);
JOptionPane.showMessageDialog(null, "El almacen ha sido guardado", "Guardado", DISPOSE_ON_CLOSE);
break;
case "Cargar":
almacen = RecuperarAlmacenPoblaciones();
break;
case "Salir":
System.exit(0);
break;
case "Crear provincia":
String crearProvincia = JOptionPane.showInputDialog(null,"Provincia:","Nueva provincia",JOptionPane.QUESTION_MESSAGE);
if((crearProvincia != null)&&(!crearProvincia.equals(""))){
almacen.addProvincia(crearProvincia);
}else{
JOptionPane.showMessageDialog(null, "Error al crear provincia", "Error", DISPOSE_ON_CLOSE);
}

break;
case "Borrar provincia":
String borrarProvincia = JOptionPane.showInputDialog(null,"Provincia:","Eliminar provincia",JOptionPane.QUESTION_MESSAGE);
if((borrarProvincia != null)&&(!borrarProvincia.equals(""))){
almacen.delProvincia(borrarProvincia);
}else{
JOptionPane.showMessageDialog(null, "Error al borrar provincia", "Error", DISPOSE_ON_CLOSE);
}
break;
case "Crear poblacion":
break;
case "Borrar poblacion":
new VentanaBorrarPoblacion(gui,almacen,listaPoblaciones,listaProvincias,listaPredicciones).setVisible(true);
break;
case "Ordenar por nombre":
/*almacen.ordenarPor(listaProvincias.getSelectedItem(), almacen.ORDENARPORNOMBRE);
listaProvincias.removeAll();
Iterator<IPoblacion> i = almacen.getPoblaciones(listaProvincias.getSelectedItem()).iterator();
while(i.hasNext()){
i.next();
listaProvincias.add(i.next().getNombre());
}*/
break;
case "Ordenar por habitantes":
/*almacen.ordenarPor(listaProvincias.getSelectedItem(), almacen.ORDENARPORHABITANTES);
listaProvincias.removeAll();
for(IPoblacion p : almacen.getPoblaciones(listaProvincias.getSelectedItem())){
listaProvincias.add(p.getNombre());
}*/
break;
case "Modificar poblacion":
break;
case "Mover poblacion":
break;
case "Actualizar Predicción":

IPoblacion poblacion = almacen.getPoblacion(listaProvincias.getSelectedItem(), listaPoblaciones.getSelectedItem());
try {
listaPredicciones.removeAll();
for(IPrediccion p : gestor.getPredicciones((IPoblacionAEMET) poblacion)){
listaPredicciones.add(p.getFecha() + " : " + p.getEstadoCielo() + " : " +
p.getTemperaturaMaxima() + " : " + p.getTemperaturaMinima());
}
} catch (GestorAEMETException e) {
new Aviso(gui,e.getMessage());
}
break;
case "Acerca de" :
new VentanaAcercaDe(gui);
break;
}
}
}

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

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

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


el cual dibuja esto:




tengo el jsplitpane definido para que actue entre el jtree y el panel predicciones el cual tengo que sustituir por una jtable pero parece que no actua por que no aparece en la aplicacion.

tambien en los dialogos de la clase controller:
Código (java) [Seleccionar]
String borrarProvincia = JOptionPane.showInputDialog(null,"Provincia:","Eliminar provincia",JOptionPane.QUESTION_MESSAGE);
if((borrarProvincia != null)&&(!borrarProvincia.equals(""))){
almacen.delProvincia(borrarProvincia);
}else{
JOptionPane.showMessageDialog(null, "Error al borrar provincia", "Error", DISPOSE_ON_CLOSE);
}


quiero modificar lo que pone en los botones para que cuando se pulsa el boton añadir provincia en vez de salir los botones aceptar y cancelar, salgan crear y cancelar

tambien necesito que al pulsar en una poblacion del jtree se cargue en la tabla de la derecha los datos de las predicciones si ya hubiera pulsado el boton actualizar prediccion al menos una vez para evitar que al pulsar en cada poblacion conecte con AEMET Y utilize mas ancho de banda


y por ultimo nos han dicho que la utilizacion del springlayout mejora la interfaz pero no me apaño muy bien a la hora de usarlo con los dialogos crear poblacion
#6
me ha salido!!!, mira:
Código (java) [Seleccionar]
private Panel addPanelIzquierda() {
// Creamos panel para mostrar provincias y poblaciones y lo colocamos a
// la izquierda
Panel izquierda = new Panel(new GridLayout(4, 1));
Label lProvincia = new Label("Provincias:");
Label lPoblacion = new Label("Poblaciones:");
listaPoblaciones.addActionListener(new Controller());
listaProvincias.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
String province = listaProvincias.getSelectedItem();
listaPoblaciones.removeAll();
for(IPoblacion p : almacen.getPoblaciones(province)) {
listaPoblaciones.add(p.getNombre());
}
}
});

izquierda.add(lProvincia);
izquierda.add(listaProvincias);
izquierda.add(lPoblacion);
izquierda.add(listaPoblaciones);
return izquierda;
}

en vez de utilizar getItem utilizo getSelectedItem y me funciona correctamente, voy a mirar lo de las predicciones ;)
#7
donde debo de introducir ese metodo?,
lo he puesto a continuacion de la creacion de la list:
Código (java) [Seleccionar]
private Panel addPanelIzquierda() {
// Creamos panel para mostrar provincias y poblaciones y lo colocamos a
// la izquierda
Panel izquierda = new Panel(new GridLayout(4, 1));
Label lProvincia = new Label("Provincias:");
Label lPoblacion = new Label("Poblaciones:");
listaPoblaciones.addActionListener(new Controller());
listaProvincias.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
String province = (String) event.getItem();
listaPoblaciones.removeAll();
for(SortedSet<IPoblacion> set : almacen.getPoblaciones(province)){
for(IPoblacion p : set) {
listaPoblaciones.add(p.getNombre());
}
}
}
});

izquierda.add(lProvincia);
izquierda.add(listaProvincias);
izquierda.add(lPoblacion);
izquierda.add(listaPoblaciones);
return izquierda;
}


pero no funciona por que tu me dices que provincia es un objeto, pero en mi codigo son string y cada string tiene asociado un sortedset de poblaciones por lo que me salta error y no compila, he conseguido hacer que funcione pero con doble click añadiendo en controller esto:
Código (java) [Seleccionar]
class Controller implements ActionListener {

public void actionPerformed(ActionEvent e) {
String nombre = e.getActionCommand();
if(listaProvincias.getSelectedItem()!=null){
listaPoblaciones.removeAll();
for(IPoblacion p : almacen.getPoblaciones(listaProvincias.getSelectedItem())){
listaPoblaciones.add(p.getNombre());
}
}
EvaluarAccion(nombre);

}
pero claro con doble click no me vale, tiene que ser con uno solo y no me sale, ya que da error
#8
Hola, necesito crear una aplicacion para informar del tiempo de las provincias que se vayan añadiendo y tengo un problema a la hora de configurar la pantalla del programa:


Lo que debo de hacer es que al pulsar en una provincia automaticamente en la lista de debajo aparezcan las poblaciones creadas en esa provincia y que si hago doble click en una provincia en el panel de la derecha me aparezcan los datos relacionados con las predicciones, mis clases son estas:

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

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

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

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

setSize(ancho, alto);
setLocationRelativeTo(null);
setLayout(new BorderLayout()); // Layout de la aplicación, podría ser otro
almacen = RecuperarAlmacenPoblaciones();
System.out.println(almacen.getProvincias());
initComponents();
for(String provincia : almacen.getProvincias()){
listaProvincias.add(provincia);
/*if(listaProvincias.getSelectedItem()==null){
listaPoblaciones.add(almacen.getPoblaciones(listaProvincias.getSelectedItem()));
}
for(IPoblacion s : almacen.getPoblaciones(listaProvincias.getSelectedItem())){

}*/
}
//Imprimimos provincias y poblaciones en las listas
}

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

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

}

private void initComponents() {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private void guardarAntesDeSalir() {

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

class Controller implements ActionListener {

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

public void EvaluarAccion(String accion) {

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

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

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

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


La que crea provincia:
Código (java) [Seleccionar]
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.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 VentanaCrearProvincia extends Dialog {

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

public VentanaCrearProvincia(Frame gui, AlmacenPoblaciones almacen, List listaPoblaciones, List listaProvincias, List listaPredicciones) {
super(gui);

this.almacen = almacen;
this.listaPoblaciones = listaPoblaciones;
this.listaProvincias = listaProvincias;
this.listaPredicciones = listaPredicciones;
initComponents(gui);
}

public void initComponents (Frame gui){
Panel panel = new Panel(new GridLayout(2,2,0,0));
Label label = new Label("Provincia:");
textField = new TextField();
crear = new Button("Crear");
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);
crear.addActionListener(new Controller());
cancelar.addActionListener(new Controller());
this.add(panel);
addWindowListener (new WindowAdapter (){
          public void windowClosing(WindowEvent e) {
          VentanaCrearProvincia.this.dispose();
             }
          });
}
public class Controller implements ActionListener {
public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand();
if(label.equals("Crear")){
try{
almacen.addProvincia(textField.getText());
listaProvincias.removeAll();
for(String provincia : almacen.getProvincias()){
listaProvincias.add(provincia);
}
System.out.println(almacen.getProvincias());
VentanaCrearProvincia.this.dispose();

}catch (IllegalArgumentException e1){
Aviso aviso = new Aviso(VentanaCrearProvincia.this,e1.getMessage());
}
}else{

VentanaCrearProvincia.this.dispose();
}
}

}
}

y la que crea poblacion

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

import paa.provincias.IPoblacion;
import principal.AlmacenPoblaciones;
import principal.Aviso;
import principal.Poblacion;

public class VentanaCrearPoblacion extends Dialog {

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

public VentanaCrearPoblacion(Frame gui, AlmacenPoblaciones almacen, List listaPoblaciones, List listaProvincias, List listaPredicciones) {
super(gui);
this.almacen = almacen;
this.listaPoblaciones = listaPoblaciones;
this.listaProvincias = listaProvincias;
this.listaPredicciones = listaPredicciones;
if(listaProvincias.getSelectedItem() != null){
initComponents(gui);
}else{
Aviso aviso = new Aviso(gui,"Selecciona una provincia");
gui.dispose();
}

}
public void initComponents(Frame gui){
setLocationRelativeTo(gui);
this.setLayout(new BorderLayout());
this.setTitle("Crear Poblacion");
this.setSize(300, 200);
Panel texto = new Panel(new GridLayout(4,1,0,0));
Panel panel = new Panel(new FlowLayout());
crear = new Button("Crear");
cancelar = new Button("Cancelar");
nombre = new TextField("Nombre");
Label nombreP = new Label(listaProvincias.getSelectedItem());
habitantes = new TextField("Habitantes");
codigo = new TextField("CodigoAEMET");
crear.addActionListener(new Controller());
cancelar.addActionListener(new Controller());

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

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

addWindowListener (new WindowAdapter (){
          public void windowClosing(WindowEvent e) {
          VentanaCrearPoblacion.this.dispose();
             }
          });
}
class Controller implements ActionListener {
private VentanaCrearPoblacion gui;
public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand();
if(label.equals("Crear")){
try{
IPoblacion poblacion = new Poblacion(nombre.getText(), Integer.parseInt(habitantes.getText()), listaProvincias.getSelectedItem(), codigo.getText());
almacen.addPoblacion(listaProvincias.getSelectedItem(),poblacion);

//listaPoblaciones2.removeAll();
for(IPoblacion p : almacen.getPoblaciones(listaProvincias.getSelectedItem())){
listaPoblaciones.add(poblacion.getNombre());
}

VentanaCrearPoblacion.this.dispose();



}catch (IllegalArgumentException e1){
Aviso aviso = new Aviso(gui,e1.getMessage());
}
}else{
VentanaCrearPoblacion.this.dispose();
}
}
}

}


las demas clases no importan ya que son de practicas anteriores o ya me las dan implementadas, en lo que dudo es a la hora de añadir la poblacion, he pensado que la clase ventanaCrearPoblacion solo debe de añadir la poblacion al almacen y que la clase que se debe de encargar de que al pulsar una provincia se muestrren las poblaciones asociadas debe de ser la principal
#9
Java / Re: Meter un Frame dentro de otro Frame
28 Marzo 2015, 12:47 PM
si, tienes toda la razon, ya he conseguido solucionar el error, era por lo que decias :), muchas gracias por todo,que paciencia has tenido jeje
#10
Java / Re: Meter un Frame dentro de otro Frame
27 Marzo 2015, 19:24 PM

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

esta es la clase principal:

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

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

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

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

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

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

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

}

private void initComponents() {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private void guardarAntesDeSalir() {

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

class Controller implements ActionListener {

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

public void EvaluarAccion(String accion) {

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

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

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

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


y esta la que se encarga de crear poblacion:

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

import principal.AlmacenPoblaciones;
import principal.Aviso;

public class VentanaCrearPoblacion extends Dialog {

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

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

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

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

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

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

        }
    }

}


este es el error que genera:

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