Conexion MySQL, JLabels y JScrollPane

sal00m
09 de Diciembre del 2004
Saludos, soy algo nuevo en esto de la programacion Swing, asi que disculpen si las preguntas son simples.

Lo que pretendo es lo siguiente:

En una de las clases que uso para construir mi aplicacion tngo un JPanel al que le añado un JScrollPane y a su vez a este le añado tantas Etiquetas como resultados me de una consulta SQL. El codigo es el siguiente: (Lo explicare por partes)

private JLabel Etiquetas[]; //String con todas las etiquetas a usar
private String Contenido[]; //String con los textos de cada una de las etiquetas
private JPanel PanelAgentes = new JPanel(); //Panel de la clase actual
private JScrollPane PanelScroll; //ScrollPane en dnd insertare las etiquetas.

Class.forName(DRIVER_MYSQL).newInstance();
conn = DriverManager.getConnection(jdbc:mysql://localhost/agentes,prueba,agentes);

Conexion a la base de datos MYSQL (El login y password asi como el nombre de la base de datos son los correctos)

if (conn != null) //Se ha conectado correctamente a la base de datos
{
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet res = stmt.executeQuery("SELECT * FROM agentes");

//Guardo el numero de filas de la tabla
res.last(); // Me voy a la ultima fila y cojo su numero
int NumFilas = res.getRow();

PanelAgentes.setLayout(new BorderLayout());
PanelAgentes.setBackground(Color.WHITE);
PanelScroll = new JScrollPane();
PanelScroll.setLayout(new GridLayout(5,2));
Etiquetas = new JLabel[NumFilas]; //Inicializo el numero de etiquetas al numero de agentes que tnga
Contenido = new String[NumFilas]; //Hago lo mismo con el string contenido

int j=0;
while(res.next())
{
Contenido[j] = res.getString("nombre");
j++;
}

for (int i=0;i<Contenido.length;i++)
{
String texto = "<html><b>El agente es <i>"+Contenido[i]+"</i></b> </html>";
Etiquetas[i] = new JLabel(texto,JLabel.LEFT);
Etiquetas[i].setVisible(true);
PanelScroll.getViewport().add(Etiquetas[i]); //Añado la etiqueta al scroll.
}
PanelAgentes.add(PanelScroll); //Añado el scroll al panel ppal
PanelAgentes.setVisible(true);//Muestro el panel
add(PanelAgentes,BorderLayout.CENTER);//Añado el panel al centro de la aplicacion
res.close();//Cierro conexiones y consultas a la base de datos
stmt.close();
conn.close();

__________________________
__________________________

ese seria mi codigo, la idea es que se muestren 10 etiquetas en la pantalla (5 filas y 2 columnas segun el gridlayout) y en caso de ser mas los agentes seleccionados de la base de datos que el scrollpane permita desplazar la pantalla para que se puedan visualizar los demas.

Los problemas... varios como podeis suponer.

1.- El gridLayout no es un scrolpanelayout y me da error de ejecucion (ClassCastException) pero no se que ponerle para que me haga lo que pretendo

2.- En caso de no poner el GridLayout me muestra solo una etiqueta en todo el panel, pero no me aparece la barra de scroll que me permitiria desplazarme entre las diferentes etiquetas.

3.- No se muestran correctamente los nombres de los agentes. Este error si que no se porque sucede ya que el NumFilas lo hace correctamente pero no me recupera bien los datos de la base de datos (en este caso el nombre)

Si se le ocurre a alguien alguna solucion aunque sea parecida a lo que yo pretendo (mostrar varios agentes en la misma pantalla.... y en caso de ser mas de los que puedo mostrar poner un scroll.... rogaria me dijesen como o me mandasen algo de codigo a mi correo

Desde ya muchas gracias por todo

sal00m
09 de Diciembre del 2004
Se me olvido decir que si algo del codigo no se entiende diganmelo y lo explico mas claramente.

Gracias

sal00m
09 de Diciembre del 2004
ya he conseguido que me muestre los nombres poniendo un res.first(), ya que como me iba al ultimo para sacar el numero de filas no mostraba correctamente los nombres al no existir mas registros en el resultdata.

Los otros 2 errores no consigo sacarlos por ahora.

A pesar de que salen los nombres correctamente no me salen en dos columnas segun lo tngo puesto en el gridlayout

sal00m
09 de Diciembre del 2004
Nadie sabe como realizar el scroll este??? :(

anonimo
09 de Diciembre del 2004
¿Quieres mostrar los registros en formato tabular? Creo que deberias usar un JTable.

Busca un tutorial de Francesc Rosés, \\\"JTable, TableModel y rendimiento\\\"

Un saludo.

sal00m
09 de Diciembre del 2004
Gracias pero mi idea era hacer un JPanel "scrollable"... Es decir.... Quiero mostrar en pantalla un grupo de 30 paneles... pero como saldrian muy pequeños me gustaria poner solo 15 o asi... y si hay mas pues poner una barra de scroll y que me permita ver los demas....

Tigre Negro
09 de Diciembre del 2004
¿te muestra el scroll o no?, jamas habia añadido un scrollPane a un componente por eso no se si te funcione esto correctamente.

Saludos

Tigre Negro
09 de Diciembre del 2004
Me parece que estas agregando de manera incorrecta el scroll, cuando declaras el scroll ahi debe de ir el panel

JScrollPane barra=new JScrollPane(panel);

y el panel ya no lo agregas a la ventana, solo agregas el scrollPane. No te garantizo que funcione alguien ya habia intentado algo similar y parece que no funcionaba ya no se si lo logro. No me he metido mucho a lo que son los paneles pero parece que estan algo limitados.

Saludos