JLabel Java swing

Résolu/Fermé
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 - 4 juin 2009 à 14:39
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 - 4 juin 2009 à 16:01
Bonjour,


Je cré une boucle :

while( rs2.next() )
{

System.out.println(rs2.getString( "question" ));
etiket = new JLabel(rs2.getString( "question" ));
co.add(etiket);
}
cela affiche exactement ce que je veux , mais le JLabel ne fonctionne pas, cela me sort une erreur : java.sql.SQLException: No data found .. donc je comprend pas pourquoi l'affichage console fonctionne mais que le Jlabel ne fonctionne pas.
merci d'avance
A voir également:

16 réponses

sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
4 juin 2009 à 15:23
Okay, si Excel. Têtre bien un bug (pas autorisé d'accéder aux mêmes données deux fois de suite. Comme disait Héraclite, hein...)

avec ta variante ,j'ai pas d'erreur mais les jlabel ne s'affiche pas <== mais tu as à la console l'ensemble de tes valeurs ? Pis, tu as vraiment vérifié que le remplacement de la boucle while par une et unique construction de JLabel permet de régler le souci ?
1
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
4 juin 2009 à 15:56
Ton code peut être amélioré... Je ne discute que les premières lignes, sinon ça prendrait trop de temps.

- Indentation, ligne blanches, espaces entourant les arguments ==> code difficile à lire. Utilise un truc de formatage (si tu es sous Eclipse, fais un CTRL+SHIFT+F)
- public class test ==> le nom doit commencer par une majuscule (convention Java)
-
JFrame f = new Fenetre();
f.setVisible(true);
==> oui, ça marche... Mais Sun recommande de faire ceci pour lancer une classe Swing:
EventQueue.invokeLater(new Runnable() {
	public void run() {
		try {
			Fenetre frame = new Fenetre();
			frame.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
});

-
private JButton bouton2;
private Map<String, JCheckBox>boxes = new HashMap<String, JCheckBox>();
private Iterator it;
private static String tabl[] = new String[1000];
==> manque de commentaires, nom des variables peu significatif, déclarations qui auraient pu être faites au moment de l'utilisation des variables...

Et ainsi de suite... Encore un tit bout de chemin avant que ce code ressemble à un code de pro. Mais ne désespère pas pour autant. Lis des bouquins de programmation, c'est important...

Concernant le MVC: l'appliquer pour cette simple application (Swing + accès direct à la base) = utiliser un fusil pour tuer une mouche. On applique le MVC dans des modèles plus complexes, genre applications 3 tiers...

++
1
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
4 juin 2009 à 14:43
Salut,

donc je comprend pas pourquoi l'affichage console fonctionne mais que le Jlabel ne fonctionne pas <==

Ca ne fonctionne pas tant que ça, d'après ta description. Car tu n'as pas à la console le contenu de la colonne 'question' mais bien une simple erreur d'accès à la base ^^

++
0
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 20
4 juin 2009 à 14:45
heu si j'ai le contenu de la base puisque le system.out.println affiche bien ce que je veux

En fait j'ai exactement ce que je veux quand je ne met pas le JLabel c'est à dire :

while( rs2.next() )
{

System.out.println(rs2.getString( "question" ));

}

lorsque j'ai ce code, l'interrogation de la base de donnée fonctionne niquel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
4 juin 2009 à 14:48
Alors c'est dû au fait que ta boucle est interrompue de manière brutale (par l'erreur DB) et que ton "co" n'a pas fini de s'initialiser... Sans voir plus de code, il est impossible de dire ce qui se passe réellement.
0
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 20
4 juin 2009 à 14:51
alors je te décri un peu le code :

j'ai une classe de test
et 2 fenetre.
L'erreur se déroule dans la deuxième fenetre.
La premiere fenetre interroge la bdd, et récupere des thème et les affiche.
La deuxieme fenetre recupere les thème coché et recupere les questions correspondante :


test :

import java.sql.SQLException;
import javax.swing.*;

public class test

{
public static void main( String [] args ) throws SQLException
{

JFrame f = new Fenetre();
f.setVisible(true);



}
}



fenetre 1


import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

class Fenetre extends JFrame implements ActionListener
{
private JButton bouton2;
private Map<String, JCheckBox>boxes = new HashMap<String, JCheckBox>();
private Iterator it;
private static String tabl[] = new String[1000];

public Fenetre()
{
setTitle("Questionnaire audit");
Container co = getContentPane();
co.setLayout(new FlowLayout());
setSize(500, 300);
setLocationRelativeTo(this.getParent());
setDefaultCloseOperation(3);
Connection c = null;
Statement stmnt = null;
//on essai d'etablir la connection
try
{
//on renseigne le driver
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
// on donne les parametre de la connection : quest étant ce que l'on a defini dans le panneau de controle
c = DriverManager.getConnection( "jdbc:odbc:quest", "", "" );
stmnt = c.createStatement();
//notre requete sql
String query = "select chapitre from [quess$] order by ide asc;";
//on met le resultat de notre requete dans un resultset
ResultSet rs = stmnt.executeQuery( query );
//on boucle sur notre resultset
while( rs.next() )
{

boxes.put(rs.getString( "chapitre" ),new JCheckBox());

}

}
catch( Exception e )
{
System.err.println( e );
}
finally
{
try
{
stmnt.close();
c.close();
}
catch( Exception e )
{
System.err.println( e );
}
}


JCheckBox box;
for(String name : boxes.keySet())
{
box = boxes.get(name);
box.setLabel(name);
}


it = boxes.keySet().iterator();
while (it.hasNext())
{
co.add(boxes.get(it.next()));
}

bouton2 = new JButton("Valider");
co.add(bouton2);
bouton2.addActionListener(this);


}


public void actionPerformed(ActionEvent a)
{
String tab[] = new String[boxes.size()];

int i= 0;
JCheckBox box;
for(String name : boxes.keySet())
{
box = boxes.get(name);
if(box.isSelected())
{
tab[i] = (String)box.getLabel();
getTabl()[i]= (String)box.getLabel();
i++;
}

}


dispose();
JFrame f2 = new Fenetre2();

f2.setVisible(true);

}

public static void setTabl(String tabl[]) {
Fenetre.tabl = tabl;
}

static String[] getTabl() {
return tabl;
}

}




fenetre 2 :(là ou il y a l'erreur)

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.JFrame;
import javax.swing.JLabel;


class Fenetre2 extends JFrame implements ActionListener

{
static String Chap[];
private JLabel etiket;
private String help;
public Fenetre2()

{
int k=0;

setTitle("Questionnaire audit");
Container co = getContentPane();
co.setLayout(new FlowLayout());
setSize(500, 300);
setLocationRelativeTo(this.getParent());
setDefaultCloseOperation(3);
Fenetre f = new Fenetre();
String query ="select question from [ques$],[quess$] where ide=chap AND chapitre IN (";

while(Fenetre.getTabl()[k] != null)
{
k++;
}

for(int i=0;i<k;i++)
{

if(i< k- 1)
{
Fenetre.getTabl()[i]="'"+Fenetre.getTabl()[i]+"'";
query += Fenetre.getTabl()[i]+"," ;
}
else
{
Fenetre.getTabl()[i]="'"+Fenetre.getTabl()[i]+"'";
query += Fenetre.getTabl()[k-1]+")order by id";
}
}

Connection c2 = null;
Statement stmnt2 = null;
try
{
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
c2 = DriverManager.getConnection( "jdbc:odbc:quest", "", "" );
stmnt2 = c2.createStatement();
ResultSet rs2 = stmnt2.executeQuery( query );
while( rs2.next() )
{

System.out.println(rs2.getString( "question" ));
etiket = new JLabel(rs2.getString( "question" ));
co.add(etiket);
}

}
catch( Exception e )
{
System.err.println( e );
}
finally
{
try
{
stmnt2.close();
c2.close();
}
catch( Exception e )
{
System.err.println( e );
}
}

}

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}
}
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
4 juin 2009 à 14:59
Chais pô...

Change tes
System.err.println( e ); 
par des
e.printStackTrace();
pour voir plus clair... Utilise un breakpoint sur ta boucle while pour voir de plus près... Remplace ces lignes
System.out.println(rs2.getString( "question" ));
etiket = new JLabel(rs2.getString( "question" )); 
par
etiket = new JLabel("test"); 
pour voir si sans accès à la base tu as tes JLabel affichées...

Plein de solutions, tu vois.

++
0
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 20
4 juin 2009 à 15:01
je peux te dejà te dire que sans l'accès à la bdd, les jLabel fonctionnent
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
4 juin 2009 à 15:04
Merci pour cette info, je t'en saurai éternellement gré.

Si tu postais le stack trace? ^^
0
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 20
4 juin 2009 à 15:07
pas de soucis^^
suffit de demander


voici le stackrace, avec la première question qui fonctionne donc c'est bien le Jlabel qui fait bugué lol

la charge de travail?
java.sql.SQLException: No data found
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
at Fenetre2.<init>(fenetre2.java:66)
at Fenetre.actionPerformed(fenetre.java:111)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(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)
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
4 juin 2009 à 15:11
Arf, zarbi. Tu es en cours de dénicher le bug du siècle ;-)

Question: pourquoi utilises-tu le driver odbc-jdbc? Beaucoup moins stable et performant par rapport à un driver jdbc. Sun recommande de ne PAS utiliser ce driver en prod...

Essayons maintenant ceci comme variante:
String colVal = rs2.getString( "question" );
System.out.println(colVal);
etiket = new JLabel(colVal); 


Ca donne quoi?
0
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 20
4 juin 2009 à 15:17
heu ma base de donnée c'est des feuille excel, donc j'utilise odbc, après peut être que je peux utiliser juste jdc mais j'ai pas trouver.


avec ta variante ,j'ai pas d'erreur mais les jlabel ne s'affiche pas
0
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 20
4 juin 2009 à 15:28
oui j'ai les valeurs de la bdd et oui oui j'avais deja tester, si je met uniquement des Jlabel, ces dernier s'affichent bien dans ma fenetre.
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
4 juin 2009 à 15:30
Chuis en panne d'idées... Fais une exécution pas à pas pour voir ce qui se passe...
0
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 20
4 juin 2009 à 15:36
Hm lol quand je fais ça, ça marche .. si avec le system.out ça marche pas , donc je pense que t'avai raison quand tu disai qu'on peu pas acceder 2 fois aux données.


while( rs2.next() )
{

etiket = new JLabel(rs2.getString( "question" ));
co.add(etiket);
}

En tout cas merci de m'avoir aider :)

Et j'aurais une dernière question : Que pense tu de mon code? devrai je le recommencer en appliquant le MVC ( en sachant que je n'ai jamais fait de MVC )
merci encore
0
aveuglemspas_sourd Messages postés 286 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 12 octobre 2009 20
4 juin 2009 à 16:01
Daccord, merci à toi :)
0