Rechercher : dans
Par :

JLabel Java swing

Dernière réponse le 4 jun 2009 à 16:01:09 aveuglemspas_sourd, le 4 jun 2009 à 14:39:23 
 Signaler ce message aux modérateurs

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

Configuration: Windows Vista Internet Explorer 7.0

Meilleures réponses pour « JLabel Java swing » dans :
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
[Logiciel libre] Installation firefox 2.0+java+flash VoirInstallation firefox 2.0+java+flash en ligne de commande A. INTRODUCTION B. INSTALLATION FIREFOX 1. Création d'environnement 2. Téléchargement et vérification de la signature 3. Installation de Firefox 4. Démarrage de l'application C....
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
Java - Les packages VoirIntroduction aux packages La programmation Java consiste à créer des classes. Or, étant donné qu'un programme est généralement développé par une équipe de programmeurs, c'est-à-dire plusieurs personnes, le fait de concaténer (mettre bout à bout)...

1

sandul, le 4 jun 2009 à 14:43:30

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 ^^

++

Répondre à sandul

2

aveuglemspas_sourd, le 4 jun 2009 à 14:45:36

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

Répondre à aveuglemspas_sourd

3

sandul, le 4 jun 2009 à 14:48:09

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.

Répondre à sandul

4

aveuglemspas_sourd, le 4 jun 2009 à 14:51:19

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

}
}

Répondre à aveuglemspas_sourd

5

sandul, le 4 jun 2009 à 14:59:15

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.

++

Répondre à sandul

6

aveuglemspas_sourd, le 4 jun 2009 à 15:01:58

Je peux te dejà te dire que sans l'accès à la bdd, les jLabel fonctionnent

Répondre à aveuglemspas_sourd

7

sandul, le 4 jun 2009 à 15:04:02

Merci pour cette info, je t'en saurai éternellement gré.

Si tu postais le stack trace? ^^

Répondre à sandul

8

aveuglemspas_sourd, le 4 jun 2009 à 15:07:16

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)

Répondre à aveuglemspas_sourd

9

sandul, le 4 jun 2009 à 15:11:26

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?

Répondre à sandul

10

aveuglemspas_sourd, le 4 jun 2009 à 15:17:21

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

Répondre à aveuglemspas_sourd

11

sandul, le 4 jun 2009 à 15:23:21
  • +1

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 ?

Répondre à sandul

12

aveuglemspas_sourd, le 4 jun 2009 à 15:28:07

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.

Répondre à aveuglemspas_sourd

13

sandul, le 4 jun 2009 à 15:30:10

Chuis en panne d'idées... Fais une exécution pas à pas pour voir ce qui se passe...

Répondre à sandul

14

aveuglemspas_sourd, le 4 jun 2009 à 15:36:56

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

Répondre à aveuglemspas_sourd

15

sandul, le 4 jun 2009 à 15:56:59
  • +1

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...

++

Répondre à sandul

16

 aveuglemspas_sourd, le 4 jun 2009 à 16:01:09

Daccord, merci à toi :)

Répondre à aveuglemspas_sourd
Collection CommentÇaMarche.net