JTextField [Résolu]

gregenforce7 9 Messages postés jeudi 18 décembre 2008Date d'inscription 30 novembre 2009 Dernière intervention - 28 nov. 2009 à 12:32 - Dernière réponse : gregenforce7 9 Messages postés jeudi 18 décembre 2008Date d'inscription 30 novembre 2009 Dernière intervention
- 30 nov. 2009 à 12:43
Hello,

Je suis débutant en Java. Je travaille avec Eclipse. Mon programme récupére une table d'une base de donnée et l'affiche dans un JTable. Un mot de passe et l'user est demander au démarrage. Je voudrais simplement récupérer un String dans un JtextField et renvoyer ce String dans une variable d'une autre classe. Pour ce faire je fais un return de ma variable vers l'autre classe et j'appel les méthodes dans cette classe. Il m'affiche une erreur me disant qu'il ne trouve pas la source???...


dans une classe je retourne ce qu'il ce trouve dans mes JTextField

public String retour1 (){
String util = champUser.getText();
return util;
}

public String retour2 (){
String pass = champPass.getText();
return pass;
}

Dans l'autre classe je les appelle

Affichage papa;
Database(Affichage parent) {
this.papa = parent;

String user = papa.retour1();
String mdp = papa.retour2();

Mais lorsque le veux utiliser mdp et user il m'afffiche une erreur
je crois que c'est au niveau de mon get Text??...
Merci
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
kirua12 1155 Messages postés samedi 17 janvier 2004Date d'inscription 29 avril 2011 Dernière intervention - 29 nov. 2009 à 12:58
3
Merci
IL nous manque pas mal de ton code. Comment tu appelles le constructeur de la classe Database ? l'objet parent est-il bien initialisé ? A quel moment l'appel des méthodes retour1() et retour2() est-il effectué ?

@ouabida : déclarer des variables locales n'est pas vraiment une bonne idée au regard du principe d'encapsulation

Merci kirua12 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de kirua12
Meilleure réponse
gregenforce7 9 Messages postés jeudi 18 décembre 2008Date d'inscription 30 novembre 2009 Dernière intervention - 29 nov. 2009 à 17:56
3
Merci
Ok je vous comprend, pour une meilleur du probléme vous mes 2 classes avec le codes :
classe Affichage :

package BD;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import javax.swing.*;



import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;




public class Affichage implements ActionListener {

JPanel contenuFenetre;
JPanel boutonFenetre;
JPanel champLabel;
JLabel labelUser;
JLabel labelPass;
JTextField champUser;
JTextField champPass;
JButton verification;
JButton connexion;


Affichage(){

contenuFenetre = new JPanel();
champLabel = new JPanel();

BorderLayout positionnement1 = new BorderLayout();
contenuFenetre.setLayout(positionnement1);


labelUser = new JLabel ("Nom D'utilisateur");
labelPass = new JLabel("Mot de passe");
champUser = new JTextField(30);
champPass = new JTextField(30);


champLabel.add(labelUser);
champLabel.add(labelPass);
champLabel.add(champUser);
champLabel.add(champPass);

GridLayout positionnement2 = new GridLayout(3,2,60,5);
champLabel.setLayout(positionnement2);


boutonFenetre = new JPanel();

FlowLayout positionnement3 = new FlowLayout();
boutonFenetre.setLayout(positionnement3);

verification = new JButton ("Vérifier la connnexion");
connexion = new JButton ("Connexion");
boutonFenetre.add(verification);
boutonFenetre.add(connexion);


contenuFenetre.add ("South",boutonFenetre);
contenuFenetre.add ("Center",champLabel);



JFrame frame1 = new JFrame ("Gestion de logement");
frame1.setContentPane(contenuFenetre);
frame1.pack();
frame1.setSize(600,150);
frame1.setLocation(300, 300);
frame1.setVisible(true);

Database moteurCalcul = new Database(this);
connexion.addActionListener(moteurCalcul);


verification.addActionListener(this);


}

public String retour1 (){
String util = champUser.getText();
return util;
}

public String retour2 (){
String pass = champPass.getText();
return pass;
}


public void actionPerformed(ActionEvent e){




String mdp = champPass.getText();

String user = champUser.getText();


try {

Class.forName("org.postgresql.Driver");

Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost/Gestion de logement",user,mdp);
conn.close();

JOptionPane.showConfirmDialog(null,
"Connexion établie",
"Juste un test",
JOptionPane.PLAIN_MESSAGE);

champLabel.setBackground (Color.green);


}
catch (Exception ex) {JOptionPane.showMessageDialog(null, "Erreur : Utilisateur ou mot de passe incorrect ", "Attention!!!", JOptionPane.ERROR_MESSAGE);
champLabel.setBackground (Color.red);


}

}


public static void main (String[] args){
Affichage go = new Affichage();
}

}

Voici maintenant la classe database :

package BD;

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.ResultSetMetaData;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

public class Database extends JFrame implements ActionListener {

Affichage papa;
Database(Affichage parent) {
this.papa = parent;
}

public void actionPerformed (ActionEvent evenement){

Database go1 = new Database();
}

public DefaultTableModel modelJtable;

public JTable Table;

public JScrollPane scTable;

public ResultSet rs;

public Statement stmt;

public ResultSetMetaData md;

public int colonnes;

public JButton clique;

public Database() {



modelJtable = new DefaultTableModel();
Table = new JTable(modelJtable) {

private static final long serialVersionUID = 1L;
// utilisé pour donné le numéro de série

public Class getColumnClass(int column) {

return getValueAt(0, column).getClass();


};

scTable = new JScrollPane(Table);

clique = new JButton("Gooo!!!!!!!");

getContentPane().setLayout(new FlowLayout();
getContentPane().add(clique);

getContentPane().add(scTable);

setSize(500,400);

setLocation (500,400);

setVisible(true);



modelJtable.addTableModelListener(new TableModelListener() {

public void tableChanged(TableModelEvent evnt) {

updateDBRow(evnt);

}

});



clique.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

String user = papa.retour1();
String mdp = papa.retour2();



try {

Class.forName("org.postgresql.Driver");

Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost/Gestion de logement",user,mdp);


stmt = conn.createStatement();

rs = stmt.executeQuery("SELECT * FROM logement");



md = rs.getMetaData();

colonnes = md.getColumnCount();



Vector nomColonnes = new Vector();

Vector data = new Vector();





for (int i = 1; i <= colonnes; i++) {

nomColonnes.addElement(md.getColumnName(i));

}



while (rs.next()){

Vector row = new Vector();



for (int i = 1; i <= colonnes; i++){

row.addElement(rs.getObject(i));
}



data.addElement(row);
}



setTableData(data, nomColonnes);
rs.close();
conn.close();

} catch (Exception ex) {JOptionPane.showMessageDialog(null, "Erreur : " + ex, "Warning", JOptionPane.ERROR_MESSAGE);}




}

});

}


public void setTableData(Vector d, Vector colname) {

modelJtable.setDataVector(d,colname);

}



public Class getColumnClass(int columnIndex) {

return Boolean.class;

}



public void updateDBRow(TableModelEvent evt) {

Object old = "";

}

}

Si vous avez des remarques ou autres sur mon code n'hésiter pas je suis
preneur de conseil

Merci

Merci gregenforce7 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de gregenforce7
Meilleure réponse
kirua12 1155 Messages postés samedi 17 janvier 2004Date d'inscription 29 avril 2011 Dernière intervention - 30 nov. 2009 à 09:46
3
Merci
as tu mis un point d'arrêt ?
Tu aurais pu voir que dans la méthode actionListener de la classe Database, tu fais :
Database go1 = new Database();

ce qui implique que ta variable 'papa' est null d'où l'erreur.

D'ailleurs, je comprends pas pourquoi tu fais ça ici ...

Merci kirua12 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de kirua12
kirua12 1155 Messages postés samedi 17 janvier 2004Date d'inscription 29 avril 2011 Dernière intervention - 28 nov. 2009 à 14:32
0
Merci
Salut,

quelle est l'erreur ?
Commenter la réponse de kirua12
gregenforce7 9 Messages postés jeudi 18 décembre 2008Date d'inscription 30 novembre 2009 Dernière intervention - 28 nov. 2009 à 17:34
0
Merci
Salut,

Donc il doit récupérer le contenu de mon JTextField et le mettre dans une variable d'une autre classe.
Si je reste dans la meme classe pas de souci. voici les erreurs affichés :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at BD.Database$3.actionPerformed(Database.java:105)
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)
Merci
Commenter la réponse de gregenforce7
ouabida10 58 Messages postés mardi 4 août 2009Date d'inscription 9 janvier 2011 Dernière intervention - 28 nov. 2009 à 19:27
0
Merci
salut
je pense que le probléme est que vous variables
String user = papa.retour1();
String mdp = papa.retour2();

et toujour null
la méthode retour1 et retour2 s'éxécute avant la remplissage de vous jTextField

essayé de déclaré vous deux var on public dans la fenetre de démarage :
public static  String user="";
public static  String mdp="";


et dans la fenetre de démarage sur le boton valider écrivez le code :
user=champUser.getText();
mdp=champPass.getText();

et pour les applés écrivez :
String user = fenetre_principale.user;
String mdp = fenetre_principale.mdp;

bon courage...
Commenter la réponse de ouabida10
gregenforce7 9 Messages postés jeudi 18 décembre 2008Date d'inscription 30 novembre 2009 Dernière intervention - 29 nov. 2009 à 18:01
0
Merci
Ah oui

les variables user et mdp servent pour la connection ma base de données postgres. Elles se situent au nieau du Driver Manager, connection conn.

merci
Commenter la réponse de gregenforce7
gregenforce7 9 Messages postés jeudi 18 décembre 2008Date d'inscription 30 novembre 2009 Dernière intervention - 30 nov. 2009 à 12:43
0
Merci
Un point d'arêt qu'entend tu par la??

Je suis obligé de mettre

Database go1 = new Database();

dans mon actionPerformed sinon quand j'appuie sur mon boutton connexion de ma classe affichage rien ne se passe...

Je dois le mettre dans un autre endroit??

Désolé mais je ne comprend pas trop

Merci
Commenter la réponse de gregenforce7

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.