Java interface probleme varriable

Bonjour, Je souhaite récupérer les données du champs text de la classe MaFenetreLogin dans la classe Controleur mais je n’arrive pas, merci de votre aide:

=> classe Pour afficher la fenetre d’authentification

import javax.swing.;
import java.awt.
;
import java.awt.event.*;

public class MaFenetreLogin extends JFrame {
private Controleur contrlog;
public MaFenetreLogin(Controleur contrlog){
JButton blogin = new JButton(“Login”);
JPanel panel = new JPanel();
JLabel Llogin= new JLabel(“Login”);
JLabel Lpwd= new JLabel(“Pwd”);
JTextField txuser = new JTextField(15);
JPasswordField pass = new JPasswordField(15);

		blogin.addActionListener(contrlog);
		txuser.addActionListener(contrlog);
		pass.addActionListener(contrlog);
		
		setLocation(500,280);
		panel.setLayout (null);

		txuser.setBounds(70,30,150,20);
		pass.setBounds(70,65,150,20);
		blogin.setBounds(110,100,80,20);
		Llogin.setBounds(20,28,80,20);
		Lpwd.setBounds(20,64,80,20);
		
		panel.add(blogin);
		panel.add(txuser);
		panel.add(pass);
		panel.add(Llogin);
		panel.add(Lpwd);
		
		Llogin.setFont(new Font("Verdana", 1, 15));
		Llogin.setForeground(new Color(0, 0, 150));
		
		Lpwd.setFont(new Font("Verdana", 1, 15));
		Lpwd.setForeground(new Color(0, 0, 150));
		
		getContentPane().add(panel);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setSize(300,200);
	
}}

=> classe Controleur

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
import javax.swing.*;

public class Controleur implements ActionListener {

private String tx;

Controleur(){
	this.fenprincipale=new MaFenetre(this);
	this.fenlog=new MaFenetreLogin(this);
	fenprincipale.setVisible(false);	
}


public void actionPerformed(ActionEvent e) {
	
	tx=txuser.getText();       //====> Problème à ce niveau: je ne peux pas récupérer la valeur du JTextField
	System.out.println(tx);
}

}

==> classe starter

public class Starter {

public static void main(String[] args) {
	
	Controleur C=new Controleur();

}

}

Merci de votre aide!!!

Salut,

Ta classe Controleur qui instancie la classe MaFenetreLogin, n’a pas accès à ton objet txuser.

Une solution simple est d’ajouter un accesseur dans la classe MaFenetreLogin :

JTextField getTxuser(){
  return txuser;
 }

Grâce à ça tu peux maintenant accéder à ton objet :

tx=fenlog.getTxuser().getText();

slt, merci
je suis une quiche en java, ça ne fonctionne pas, j’ai tenté une autre chose en déclarant la varriable en public et dans la classe MaFenetreLogin et donc j’arrive à récupérer ma variable dans le contrôleur mais dans le print pas de résultat.

public class MaFenetreLogin extends JFrame {
private Controleur contrlog;
public String tx;==========================> ajout
public MaFenetreLogin(Controleur contrlog){

	    JButton blogin = new JButton("Login");
		JPanel panel = new JPanel();
		JLabel Llogin= new JLabel("Login");
		JLabel Lpwd= new JLabel("Pwd");
		JTextField txuser = new JTextField(15);
		JPasswordField pass = new JPasswordField(15);
		blogin.addActionListener(contrlog);
		txuser.addActionListener(contrlog);
		pass.addActionListener(contrlog);
		setLocation(500,280);
		panel.setLayout (null);
		txuser.setBounds(70,30,150,20);
		pass.setBounds(70,65,150,20);
		blogin.setBounds(110,100,80,20);
		Llogin.setBounds(20,28,80,20);
		Lpwd.setBounds(20,64,80,20);
		panel.add(blogin);
		panel.add(txuser);
		panel.add(pass);
		panel.add(Llogin);
		panel.add(Lpwd);
		Llogin.setFont(new Font("Verdana", 1, 15));
		Llogin.setForeground(new Color(0, 0, 150));
		Lpwd.setFont(new Font("Verdana", 1, 15));
		Lpwd.setForeground(new Color(0, 0, 150));
		getContentPane().add(panel);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setSize(300,200);
	tx=txuser.getText();	
	
}

}

public class Controleur implements ActionListener {

private MaFenetreLogin fenlog;
private MaFenetre fenprincipale;

Controleur(){
	this.fenprincipale=new MaFenetre(this);
	this.fenlog=new MaFenetreLogin(this);
	fenprincipale.setVisible(false);
	fenlog.getClass().getName();
}


public void actionPerformed(ActionEvent e) {
	
	System.out.println("ok");
	System.out.println(fenlog.tx);=================> je n'ai plus d'erreur mais quand je lance l'appli je       n'arrive pas à récupérer ma valeur saisie dans le JTexfield
}

}
merci d’avance

normal qu’il n’y a rien à afficher, tu récupères la valeur du texte au moment de la création de ton ihm, l’utilisateur n’a pas encore complété le formulaire, le champ est donc vide.

Il faut que tu récupères la valeur comme tu l’avais fait dans ton 1er message, dans la méthode actionPerformed() qui est appelée lorsque l’utilisateur clique sur le bouton ok.

En reprenant ce que je t’ai conseillé, voir mes commentaires ds la code sur ce que j’ai modifié

public class MaFenetreLogin extends JFrame {
private Controleur contrlog;
private JTextField txuser; // Ajout du champ text en tant que membre privé

public MaFenetreLogin(Controleur contrlog){

JButton blogin = new JButton("Login");
JPanel panel = new JPanel();
JLabel Llogin= new JLabel("Login");
JLabel Lpwd= new JLabel("Pwd");
txuser = new JTextField(15); // n instancie désormais le membre privé de la classe
JPasswordField pass = new JPasswordField(15);
blogin.addActionListener(contrlog);
txuser.addActionListener(contrlog);
pass.addActionListener(contrlog);
setLocation(500,280);
panel.setLayout (null);
txuser.setBounds(70,30,150,20);
pass.setBounds(70,65,150,20);
blogin.setBounds(110,100,80,20);
Llogin.setBounds(20,28,80,20);
Lpwd.setBounds(20,64,80,20);
panel.add(blogin);
panel.add(txuser);
panel.add(pass);
panel.add(Llogin);
panel.add(Lpwd);
Llogin.setFont(new Font("Verdana", 1, 15));
Llogin.setForeground(new Color(0, 0, 150));
Lpwd.setFont(new Font("Verdana", 1, 15));
Lpwd.setForeground(new Color(0, 0, 150));
getContentPane().add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setSize(300,200);

}

// AJout d'un accesseur à la variable du champ texte
JTextField getTxuser(){
 return txuser;
 }

}
public class Controleur implements ActionListener {

private MaFenetreLogin fenlog;
private MaFenetre fenprincipale;

Controleur(){
this.fenprincipale=new MaFenetre(this);
this.fenlog=new MaFenetreLogin(this);
fenprincipale.setVisible(false);
fenlog.getClass().getName();
}


public void actionPerformed(ActionEvent e) {

System.out.println("ok");
System.out.println("valeur=" + fenlog.getTxuser().getText()); // affichage de la valeur saisie
}

}

Super, merci. J’ai pigé le truc.