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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Llenar una ventana con los datos de otra al abrirla
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Llenar una ventana con los datos de otra al abrirla  (Leído 2,472 veces)
NeoChiri

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Llenar una ventana con los datos de otra al abrirla
« en: 15 Mayo 2016, 18:00 pm »

Tengo dos ventanas que podréis ver en una imagen más adelante.



Código de `VistaArtistasBuscar`:

    
Código:
public class VistaArtistasBuscar extends JFrame implements ActionListener{

/**
* Componentes de la ventana
*/
private Coordinador miCoordinador;
private JTextField campoTextoArtista, campoTextoArtista2;
private JLabel etiquetaNombreArtista, etiquetaNombreArtista2, etiquetaNombreAlbumes;
private JButton botonBuscar, botonEliminar, botonModificar, botonSeleccionar;
private JList listadoAlbumes;
private DefaultListModel modeloLista;
private JSeparator separador;
private JScrollPane scrollListadoAlbumes;
private Generador miGenerador;

/**
* Iniciamos la ventana.
*/
public VistaArtistasBuscar() {
iniciarVentana();
}

/**
* Contenido de la ventana
*/
private void iniciarVentana() {

/*Propiedades Frame*/
setTitle("Artistas: Buscar");
setBounds(200, 100, 450, 337);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
setLocationRelativeTo(null);
setResizable(false);

/*Etiqueta nombre Artista I*/
etiquetaNombreArtista = new JLabel("Nombre:");
etiquetaNombreArtista.setFont(new Font("Tahoma", Font.PLAIN, 14));
etiquetaNombreArtista.setBounds(10, 6, 68, 22);

/*Campo texto Artista I*/
campoTextoArtista = new JTextField();
campoTextoArtista.setBounds(78, 6, 259, 22);
campoTextoArtista.setColumns(10);

/*Boton Buscar*/
botonBuscar = new JButton("Buscar");
botonBuscar.setBounds(347, 6, 77, 23);
botonBuscar.addActionListener(this);
getContentPane().setLayout(null);
getContentPane().add(etiquetaNombreArtista);
getContentPane().add(campoTextoArtista);
getContentPane().add(botonBuscar);

/*Etiqueta nombre Artista II*/
etiquetaNombreArtista2 = new JLabel("Nombre:");
etiquetaNombreArtista2.setFont(new Font("Tahoma", Font.PLAIN, 14));
etiquetaNombreArtista2.setBounds(10, 56, 68, 14);
getContentPane().add(etiquetaNombreArtista2);

/*Campo texto Artista II*/
campoTextoArtista2 = new JTextField();
campoTextoArtista2.setBounds(82, 55, 241, 20);
getContentPane().add(campoTextoArtista2);
campoTextoArtista2.setColumns(10);

/*Boton Eliminar*/
botonEliminar = new JButton("Eliminar");
botonEliminar.setBounds(234, 92, 89, 23);
botonEliminar.addActionListener(this);
getContentPane().add(botonEliminar);

/*Boton Modificar*/
botonModificar = new JButton("Modificar");
botonModificar.setBounds(135, 92, 89, 23);
botonModificar.addActionListener(this);
getContentPane().add(botonModificar);

/*Etiqueta Albumes*/
etiquetaNombreAlbumes = new JLabel("Albumes:");
etiquetaNombreAlbumes.setFont(new Font("Tahoma", Font.PLAIN, 14));
etiquetaNombreAlbumes.setBounds(10, 134, 89, 14);
getContentPane().add(etiquetaNombreAlbumes);

/*Boton Seleccionar*/
botonSeleccionar = new JButton("Seleccionar");
botonSeleccionar.setBounds(335, 265, 89, 23);
botonSeleccionar.addActionListener(this);
getContentPane().add(botonSeleccionar);

/*Separador*/
separador = new JSeparator();
separador.setBounds(0, 39, 434, 2);
getContentPane().add(separador);

/*Scroll para el listado de los Artistas*/
scrollListadoAlbumes = new JScrollPane();
listadoAlbumes = new JList();
modeloLista=new DefaultListModel();
scrollListadoAlbumes.setBounds(10, 154, 306, 135);
getContentPane().add(scrollListadoAlbumes);
scrollListadoAlbumes.setViewportView(listadoAlbumes);

}

/**
* Relacionamos esta clase con el Coordinador
*/

public void setCoordinador(Coordinador miCoordinador){
this.miCoordinador=miCoordinador;
}

/**
* Clase que maneja todos los eventos que ocurren en la ventana
*/

@Override
public void actionPerformed(ActionEvent evento) {

if(evento.getSource()==botonBuscar){

try{
ArtistaDAO artistaDAO=new ArtistaDAO();
ArtistaVO artistaVO=new ArtistaVO();
miGenerador=new Generador();

artistaVO.setNombreArtista(campoTextoArtista.getText());
artistaDAO.buscarArtista(artistaVO);
if(artistaDAO.buscarArtista(artistaVO)!=null){
mostrarArtista(artistaVO);
miGenerador.llenarListaAlbumes(artistaVO, modeloLista, listadoAlbumes, artistaDAO);
}else{
JOptionPane.showMessageDialog(null, "El artista no existe", "Error", JOptionPane.ERROR_MESSAGE);
}
}catch(Exception excepcion){
excepcion.printStackTrace();
}

}

if(evento.getSource()==botonModificar){
try{
ArtistaVO artistaVO=new ArtistaVO();
ArtistaDAO artistaDAO=new ArtistaDAO();
String nuevoNombre=campoTextoArtista2.getText();
artistaVO.setNombreArtista(campoTextoArtista.getText());
artistaDAO.modificarArtista(artistaVO, nuevoNombre);
}catch(Exception excepcion){
excepcion.printStackTrace();
}
}

if(evento.getSource()==botonEliminar){
if(!campoTextoArtista2.getText().equals("")){
int respuesta=JOptionPane.showConfirmDialog(this, "¿Estás seguro que deseas eliminar el Artista?", "Confirmacion", JOptionPane.YES_NO_OPTION);
if(respuesta==JOptionPane.YES_OPTION){
ArtistaDAO artistaDAO=new ArtistaDAO();
ArtistaVO artistaVO=new ArtistaVO();
AlbumVO albumVO=new AlbumVO();

albumVO.setNombreAlbum(listadoAlbumes.getSelectedValue().toString());
artistaVO.setNombreArtista(campoTextoArtista2.getText());
artistaDAO.eliminarArtista(artistaVO, artistaDAO, albumVO);
limpiar();
modeloLista.removeAllElements();
}
}
}

if(listadoAlbumes.getSelectedIndex()>=0&&evento.getSource()==botonSeleccionar){
VistaAlbumesBuscar ventanaAlbumBuscar=new VistaAlbumesBuscar();

ventanaAlbumBuscar.setVisible(true);
ventanaAlbumBuscar.abrirVentana(campoTextoArtista2, modeloLista, listadoAlbumes);

}else if(evento.getSource()==botonSeleccionar){
JOptionPane.showMessageDialog(null, "Debes elegir un Album de la lista","Información",JOptionPane.INFORMATION_MESSAGE);
}



}

/**
* Establecemos el contenido del Campo texto tras la búsqueda
*/

private void mostrarArtista(ArtistaVO artistaVO){
campoTextoArtista2.setText(artistaVO.getNombreArtista());
}


private void limpiar(){
campoTextoArtista.setText("");
campoTextoArtista2.setText("");
}


    }




Aquí tengo la otra ventana, que se llama `VistaAlbumesBuscar`, y este es el código:

    
Código:
public class VistaAlbumesBuscar extends JFrame implements ActionListener{

/**
* Componentes de la ventana
*/
private Coordinador miCoordinador;
private JTextField campoTextoArtista, campoTextoAlbum;
private JLabel etiquetaArtista, etiquetaAlbum, etiquetaArtista2, etiquetaAlbum2, etiquetaCanciones;
private JSeparator separador;
private JButton botonModificar, botonEliminar, botonEliminar2, botonAdd;
private JList listaCanciones;
private DefaultListModel modeloLista;
private JScrollPane scrollListadoCanciones;
private JComboBox elegirAlbum, elegirArtista;
private DefaultComboBoxModel modeloCombo;
private Generador miGenerador;

/**
* Iniciamos la ventana
*/
public VistaAlbumesBuscar() {
iniciarVentana();
}

/**
* Contenido de la ventana.
*/
private void iniciarVentana() {

/*Propiedades Frame*/
setTitle("Albumes: Buscar");
setBounds(100, 100, 353, 437);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
setLocationRelativeTo(null);
setResizable(false);

/*Etiqueta Artista*/
etiquetaArtista = new JLabel("Artista:");
etiquetaArtista.setFont(new Font("Tahoma", Font.PLAIN, 14));
etiquetaArtista.setBounds(10, 11, 46, 14);
getContentPane().add(etiquetaArtista);

/*Etiqueta de Album*/
etiquetaAlbum = new JLabel("Album:");
etiquetaAlbum.setFont(new Font("Tahoma", Font.PLAIN, 14));
etiquetaAlbum.setBounds(10, 36, 46, 14);
getContentPane().add(etiquetaAlbum);

/*Separador*/
separador = new JSeparator();
separador.setBounds(0, 76, 337, 2);
getContentPane().add(separador);

/*Etiqueta Artista II*/
etiquetaArtista2 = new JLabel("Artista:");
etiquetaArtista2.setFont(new Font("Tahoma", Font.PLAIN, 14));
etiquetaArtista2.setBounds(10, 89, 46, 14);
getContentPane().add(etiquetaArtista2);

/*Campo texto Artista*/
campoTextoArtista = new JTextField();
campoTextoArtista.setBounds(62, 89, 231, 20);
getContentPane().add(campoTextoArtista);
campoTextoArtista.setColumns(10);
campoTextoArtista.setEditable(false);

/*Etiqueta Album II*/
etiquetaAlbum2 = new JLabel("Album:");
etiquetaAlbum2.setFont(new Font("Tahoma", Font.PLAIN, 14));
etiquetaAlbum2.setBounds(10, 121, 46, 14);
getContentPane().add(etiquetaAlbum2);

/*Campo texto Album*/
campoTextoAlbum = new JTextField();
campoTextoAlbum.setBounds(62, 120, 231, 20);
getContentPane().add(campoTextoAlbum);
campoTextoAlbum.setColumns(10);

/*Boton Modificar*/
botonModificar = new JButton("Modificar");
botonModificar.setBounds(62, 151, 89, 23);
botonModificar.addActionListener(this);
getContentPane().add(botonModificar);

/*Boton Eliminar*/
botonEliminar = new JButton("Eliminar");
botonEliminar.setBounds(161, 151, 89, 23);
getContentPane().add(botonEliminar);

/*Etiqueta Canciones*/
etiquetaCanciones = new JLabel("Canciones:");
etiquetaCanciones.setFont(new Font("Tahoma", Font.PLAIN, 14));
etiquetaCanciones.setBounds(10, 206, 76, 14);
getContentPane().add(etiquetaCanciones);

/*Lista de Canciones*/
scrollListadoCanciones=new JScrollPane();
listaCanciones = new JList();
modeloLista=new DefaultListModel();
scrollListadoCanciones.setBounds(10, 226, 210, 163);
getContentPane().add(scrollListadoCanciones);
scrollListadoCanciones.setViewportView(listaCanciones);

/*Boton Eliminar II*/
botonEliminar2 = new JButton("Eliminar");
botonEliminar2.setBounds(226, 366, 101, 23);
getContentPane().add(botonEliminar2);

/*Boton Añadir*/
botonAdd = new JButton("A\u00F1adir");
botonAdd.setBounds(226, 332, 101, 23);
getContentPane().add(botonAdd);

/*Combo Artista*/
elegirArtista = new JComboBox();
modeloCombo = new DefaultComboBoxModel();
miGenerador=new Generador();
elegirArtista.addActionListener(this);
elegirArtista.setBounds(66, 10, 227, 20);
getContentPane().add(elegirArtista);
miGenerador.llenarComboArtistas(modeloCombo, elegirArtista);


/*Combo Albumes*/
elegirAlbum = new JComboBox();
elegirAlbum.setBounds(66, 35, 227, 20);
elegirAlbum.addActionListener(this);
getContentPane().add(elegirAlbum);
}

public void setCoordinador(Coordinador miCoordinador){
this.miCoordinador=miCoordinador;
}

@Override
public void actionPerformed(ActionEvent evento) {
if(evento.getSource()==elegirArtista){
if(elegirArtista.getSelectedIndex()>0){
miGenerador.llenarComboAlbumes(modeloCombo, elegirAlbum, elegirArtista);
campoTextoArtista.setText((String)elegirArtista.getSelectedItem());

}
}
if(evento.getSource()==elegirAlbum||elegirAlbum.getSelectedIndex()>=0){

AlbumVO albumVO=new AlbumVO();
AlbumDAO albumDAO=new AlbumDAO();

albumVO.setNombreAlbum(campoTextoAlbum.getText());
campoTextoAlbum.setText((String)elegirAlbum.getSelectedItem());
miGenerador.llenarListaCanciones(albumVO, modeloLista, listaCanciones, albumDAO);
}
if(evento.getSource()==botonModificar){
try{
AlbumVO albumVO=new AlbumVO();
AlbumDAO albumDAO=new AlbumDAO();

String nuevoNombreAlbum=campoTextoAlbum.getText();
albumVO.setNombreAlbum(elegirAlbum.getSelectedItem().toString());
albumDAO.modificarAlbum(albumVO, nuevoNombreAlbum);
}catch(Exception excepcion){
excepcion.printStackTrace();
}
}
}

public void abrirVentana(JTextField campoTextoArtista2, DefaultListModel modeloLista, JList listadoAlbumes){

miGenerador.llenarComboArtistas(modeloCombo, elegirArtista);
miGenerador.llenarComboAlbumes(modeloCombo, elegirAlbum, elegirArtista);
elegirArtista.setSelectedItem(campoTextoArtista2.getText());
elegirAlbum.setSelectedItem(listadoAlbumes.getSelectedValue());
}

    }
Pues mi problema se plantea es que en la ventana 'VistaArtistasBuscar' yo desde ahí busco un `Artista`, y este se me muestra con todos sus `Album`es,
pues yo quiero que al tener seleccionado un `Album` y pincha en el botón seleccionar, se me abra la ventana 'VistaAlbumesBuscar' mostrando los datos
del `Artista`, ya son el nombre de este, el nombre del `Album` y el listado de `Cancion`es asociadas a este `Album`, a la vez que los `JComboBox` de `Artista` y `Album` contengan el resto de nombre, pero que al abrir la ventana estén señalados esos nombres, tal y como muestro en esta imagen, y podéis ver como son las dos ventanas:



Aquí dejo los metodos que he usado para llenar los `JComboBox` y el `JList` de la ventana `VistaAlbumesBuscar`:

    
Código:
public void llenarComboArtistas(DefaultComboBoxModel modeloCombo, JComboBox elegirArtista) {

Conexion conexion=new Conexion();

        try {
         modeloCombo = new DefaultComboBoxModel();
         Statement sqlNombreArtista=conexion.getConexion().createStatement();
       ResultSet resultado=sqlNombreArtista.executeQuery("SELECT name from artist");
            modeloCombo.addElement("Seleccione un campo");
            elegirArtista.setModel(modeloCombo);
            while (resultado.next()) {
                modeloCombo.addElement(resultado.getString("name"));
                elegirArtista.setModel(modeloCombo);
            }
 
            sqlNombreArtista.close();
            conexion.cerrarConexion();
        } catch (SQLException excepcion) {
            excepcion.printStackTrace();
        }
      }
 
Código:
 public void llenarComboAlbumes(DefaultComboBoxModel modeloCombo, JComboBox elegirAlbum, JComboBox elegirArtista) {

Conexion conexion=new Conexion();

        try {
        
         ArtistaDAO artistaDAO=new ArtistaDAO();
         ArtistaVO artistaVO=new ArtistaVO();
        
         elegirAlbum.removeAllItems();
         artistaVO.setNombreArtista((String)elegirArtista.getSelectedItem());
         String sqlConsulta="SELECT title from album where artistid=?";
         PreparedStatement sqlNombreAlbum=conexion.getConexion().prepareStatement(sqlConsulta);
         sqlNombreAlbum.setInt(1, artistaDAO.getIdArtista(artistaVO));
       ResultSet resultado=sqlNombreAlbum.executeQuery();
            elegirAlbum.setModel(modeloCombo);
            while (resultado.next()) {
                modeloCombo.addElement(resultado.getString("title"));
                elegirAlbum.setModel(modeloCombo);
            }
            sqlNombreAlbum.close();
            
        } catch (SQLException excepcion) {
            excepcion.printStackTrace();
        }finally{
         conexion.cerrarConexion();
        }
      }

Y como podéis ver dentro de la ventana `VistaAlbumesBuscar` he creado un método llamado `abrirVentana` al cual llamo desde `VistaArtistasBuscar` el cual podéis ver aquí:

    
Código:
 public void abrirVentana(JTextField campoTextoArtista2, DefaultListModel modeloLista, JList listadoAlbumes){

miGenerador.llenarComboArtistas(modeloCombo, elegirArtista);
miGenerador.llenarComboAlbumes(modeloCombo, elegirAlbum, elegirArtista);
elegirArtista.setSelectedItem(campoTextoArtista2.getText());
elegirAlbum.setSelectedItem(listadoAlbumes.getSelectedValue());
  }

Y la llamada desde `VistaArtistasBuscar` es tal que así (Evidentemente va dentro de un ActionListener como podeis comprobar en `VistaArtistasBuscar`):

    
Código:
 if(listadoAlbumes.getSelectedIndex()>=0&&evento.getSource()==botonSeleccionar){
VistaAlbumesBuscar ventanaAlbumBuscar=new VistaAlbumesBuscar();

ventanaAlbumBuscar.setVisible(true);
ventanaAlbumBuscar.abrirVentana(campoTextoArtista2, modeloLista, listadoAlbumes);
                   }

El problema es que me abre la ventana pero se muestra en blanco igualmente, con los `JComboBox` rellenos pero sin mostrar los valores de la ventana anterior; así que me gustaría que me ayudéis a ver qué está mal en ese método o cómo poder hacer lo que deseo aunque sea usando otra forma.


« Última modificación: 15 Mayo 2016, 18:19 pm por NeoChiri » En línea

+ 1 Oculto(s)

Desconectado Desconectado

Mensajes: 298


un defecto se puede convertir en una virtud


Ver Perfil WWW
Re: Llenar una ventana con los datos de otra al abrirla
« Respuesta #1 en: 16 Mayo 2016, 16:07 pm »

no lei todo lo que posteaste... me dio pereza ajajajaj disculpas

pero lo podes pasar mediante un arreglo


En línea

DIANA KARINA HM

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Llenar una ventana con los datos de otra al abrirla
« Respuesta #2 en: 8 Agosto 2016, 17:59 pm »

Lo primero es poner un método setText(String texto) a ventana2.
public class Ventana2 extends JDialog
{
   private JLabel etiqueta = new JLabel ("su texto aquí");
   ...
   public void setText (String elTexto)
   {
      etiqueta.setText(elTexto);
   }
}

Si Ventana1 es la que hace el new de Ventana2, simplemente tendremos llamar al método setText()

public class Ventana1 extends JDialog
{
   private Ventana2 v2 = new Ventana2();
   private JButton boton = new JButton("Pulsame");
   ...
   public Ventana1()
   {
      boton.addActionListener (new ActionListener() {
         public void actionPerformed (ActionEvent e) {
            v2.setText("El texto");
         }
      });
   }
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines