JTextField

Résolu
gregenforce7 Messages postés 9 Date d'inscription jeudi 18 décembre 2008 Statut Membre Dernière intervention 30 novembre 2009 - 28 nov. 2009 à 12:32
gregenforce7 Messages postés 9 Date d'inscription jeudi 18 décembre 2008 Statut Membre Dernière intervention 30 novembre 2009 - 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

8 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
29 nov. 2009 à 12:58
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
3
gregenforce7 Messages postés 9 Date d'inscription jeudi 18 décembre 2008 Statut Membre Dernière intervention 30 novembre 2009
29 nov. 2009 à 17:56
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
3
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
30 nov. 2009 à 09:46
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 ...
3
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
28 nov. 2009 à 14:32
Salut,

quelle est l'erreur ?
0

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

Posez votre question
gregenforce7 Messages postés 9 Date d'inscription jeudi 18 décembre 2008 Statut Membre Dernière intervention 30 novembre 2009
28 nov. 2009 à 17:34
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
0
ouabida10 Messages postés 57 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 9 janvier 2011 1
28 nov. 2009 à 19:27
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...
0
gregenforce7 Messages postés 9 Date d'inscription jeudi 18 décembre 2008 Statut Membre Dernière intervention 30 novembre 2009
29 nov. 2009 à 18:01
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
0
gregenforce7 Messages postés 9 Date d'inscription jeudi 18 décembre 2008 Statut Membre Dernière intervention 30 novembre 2009
30 nov. 2009 à 12:43
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
0
Rejoignez-nous