Espace membre :
flechePublicité

14 messages
Filtrer ok

[Java] Récupérer la valeur de plusieurs JTextField

   Java
Bonsoir,

Je fais un éditeur de fichier .ini pour mon projet de fin d'année (DUT Informatique 2ème année).

J'ai un main() qui créer une Fenetre (une JFrame) à laquelle je rajoute Contenu et Boutons (un JPanel).

Dans Contenu j'affiche des JTextField (un par variable de section du .ini) et dans Boutons j'aimerais pouvoir récupérer les valeurs des JTextField (pour pouvoir les re-écrire dans le .ini).

Les JTextField sont ajoutés dans un Box puis affichés.
J'avais pensé ajouter également les JTextField dans un Container en les récupérant après dans le main puis les retransmettre à Boutons, mais si j'ajoute les JTextField au Box et au Container, il ne s'affichent plus.

Avez-vous une idée ?

Code :
public class IniEditor {
	public static void main(String[] args) {
  Fenetre fenetre = new Fenetre();

  Contenu contenu = new Contenu();

  int variables_count = contenu.get_iniVars().getComponentCount();
  Component variables[] = contenu.get_iniVars().getComponents();

  Boutons boutons = new Boutons(fenetre);

  // Add top and bottom panel to content pane
  Container content = fenetre.getContentPane(); // Get content pane
  content.setLayout(new BorderLayout()); // Set border layout manager
	
  content.add(contenu.get_conteneur(), BorderLayout.CENTER);
  content.add(boutons, BorderLayout.SOUTH);
	
  fenetre.pack();
  fenetre.setVisible(true);
	}
}
Code :
class Fenetre extends JFrame {
	public Fenetre() {
  Toolkit k = Toolkit.getDefaultToolkit();
  Dimension tailleEcran = k.getScreenSize();

  this.setTitle("Configurateur pour Pong 3D");
  //this.setSize(400, 400);
  //setLocation(tailleEcran.width * 3/8, tailleEcran.height * 3/8);

  this.setBounds(tailleEcran.width/4, tailleEcran.height/4, // Position
  tailleEcran.width/2, tailleEcran.height/2); // Size

  this.setResizable(true);

  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
Code :
public class Contenu {

	private Box conteneur = Box.createVerticalBox();
	private Container iniVars = new Container();

	public Contenu() {

  RecupIni donneesIni = new RecupIni();
  IniSection sections[] = donneesIni.get();

  Box ligne = null;
  JTextField champ = null;

  for(int j=0; j<donneesIni.count(); j++) { // Pour chaque section
  	/** Affichage nom Section **/
  	ligne = Box.createHorizontalBox();
  	ligne.add(new JLabel("[ " + sections[j].getName() + " ]"));
  	this.conteneur.add(ligne);
  	this.conteneur.add(Box.createVerticalStrut(5));
  	//--

  	sections[j].vectorize(); // Pour permettre l'accès aux variables de la Section par des entiers
  	int sectionSize;
  	sectionSize = sections[j].size();
  	for(int k=0; k<sectionSize; k++) { // Pour chaque variables de la section
    ligne = Box.createHorizontalBox();
    ligne.add(new JLabel(sections[j].getKey(k) + "  "));

    champ = new JTextField(sections[j].getValue(k));
    champ.setName(sections[j].getName() + ":" + sections[j].getKey(k)); // Nom pour identifier le champ
    ligne.add(champ);
    //iniVars.add(champ);
    System.out.println(champ.getName()); // DEBUG
    this.conteneur.add(ligne);
  	}

  	/** Séparateur de Section **/
  	if((j+1)<donneesIni.count()) { // Si y'a une Section après la Section courante
    this.conteneur.add(Box.createVerticalStrut(5));
    ligne = Box.createHorizontalBox();
    ligne.add(new JSeparator());
    this.conteneur.add(ligne);
    this.conteneur.add(Box.createVerticalStrut(5));
  	}
  	//--
  }

  this.conteneur.add(Box.createVerticalStrut(30));
	}

	public Box get_conteneur() {
  return this.conteneur;
	}

	public Container get_iniVars() {
  return this.iniVars;
	}
}
Code :
class Boutons extends JPanel {
	private Fenetre maFenetre = null;

	public Boutons(Fenetre maFenetre) {
  this.maFenetre = maFenetre;

  Border edge = BorderFactory.createRaisedBevelBorder();
  JButton button;
  Dimension size = new Dimension(80,20);

  // Les boutons
  this.add(button = new JButton("Sauvegarder"));
  button.setBorder(edge);
  button.setPreferredSize(size);
  MyOkListener OK_Listener = new MyOkListener();
  button.addActionListener(OK_Listener);

  this.add(button = new JButton("Quitter"));
  button.setBorder(edge);
  button.setPreferredSize(size);
  MyQuitListener Quit_Listener = new MyQuitListener();
  button.addActionListener(Quit_Listener);
	}

	class MyOkListener implements ActionListener {
  public void actionPerformed(ActionEvent event) {
  	FileWriter iniWriter = null;
  	
  	// Ouverture du fichier
  	try {
    iniWriter = new FileWriter(new File("config.ini"));
  	}
  	catch(IOException e) {
    System.out.println("Impossible d'ouvrir en ecriture le fichier config.ini");
    System.out.println("Exception type \"IOException\" levee\n" + e.getMessage());
  	}

  	// Ecriture dans le fichier
  	System.out.println("Ecriture...");
  	/**
  	try {
    /**
    for(int i = 0; i < this.DATATYPES_N; i++) {
    iniWriter.write(this.dataTypes[i][1] + " " + (this.dataTypesContents_lineCount[i] * this.dataTypes_multiplicationFactor[i]) + this.EOLTYPES[this.eolType] + 
    	this.dataTypesContents[i]);
    }
    ** /
  	}
  	catch(IOException e) {
    System.out.println("Impossible d'ecrire dans le fichier config.ini");
    System.out.println("Exception type \"IOException\" levee\n" + e.getMessage());
  	}
  	finally {
    try {
    	iniWriter.close();
    }
    catch(IOException e) {
    	System.out.println("Impossible de fermer le fichier config.ini");
    	System.out.println("Exception type \"IOException\" levee\n" + e.getMessage());
    }
  	}
  	**/

  	// Fermeture du fichier
  	try {
    iniWriter.close();
  	}
  	catch(IOException e) {
    System.out.println("Impossible de fermer le fichier config.ini");
    System.out.println("Exception type \"IOException\" levee\n" + e.getMessage());
  	}
  }
	}

	class MyQuitListener implements ActionListener {
  public void actionPerformed(ActionEvent event) {
  	maFenetre.dispose();
  }
	}
}
 
 
il faut que tu créé une deuxieme instance de chaque jtextfield (clone() ?? ou new JTextField(...) )

conseil : sauvegarde les références de tes textfields dans un vecteur
 
 
Si je clone chaque JTextField, un getText() sur le clone ne retournera pas la même chose que sur "l'original" vu qu'entre temps, l'utilisateur aura saisi du texte dans l'original.

Qu'appeles-tu les références des JTextField ?
 
 
Et un Set<JTextField> que tu remplis pendant la création de tes JTextField ? (genre : JTextField txt = new JTextField();
set.add(txt);

Tu as aussi le choix d'une bonne Map<String, JTextField>().
Modérateur Logiciel - Programmation
 
 
Je tente avec une Hashtable, mais lorsque je fais :
htable.add("(clé)", champ);
J'obtiens le message d'erreur suivant lors de la compilation :
symbol: method add(java.lang.String,javax.swing.JTextField)
location: class java.util.Hashtable
Impossible d'ajouter un JTextField dans une Hashtable ?
 
 
Bon oubliez ça, j'avais pas les yeux en face des trous, j'appelais la méthode add() et non put()
 
 
_Raynor_ a écrit:
Je tente avec une Hashtable, mais lorsque je fais :
htable.add("(clé)", champ);
J'obtiens le message d'erreur suivant lors de la compilation :
Impossible d'ajouter un JTextField dans une Hashtable ?

Tu les mets tous dans un Vector, ça sera plus simple.

Ensuite, pour récupérer toutes les valeurs des JTextField, tu fais :
Code :
Iterator i = vectorTextField.iterator();
while(i.hasNext()) {
    JTextField temp = (JTextField)i.next();
    String s = temp.getText();

    /* (...) */

}
 
 
Vector, HashTable?? c'est du < 1.5 tout ça...

et HashMap ? !

Modérateur Logiciel - Programmation
 
 
Qui te dis que je suis pas en < 1.5 ?
 
 
erf y a la 1.6 qui sort bientôt aussi...
Modérateur Logiciel - Programmation
 
 
Sans-Nom a écrit:
Vector, HashTable?? c'est du < 1.5 tout ça...

et HashMap ? !



Pas encore pris le temps d'étudier toutes les nouveautés de la 1.5 donc je développe encore en compatible 1.4.
 
 
hé bé bref, c'est vous qui voyez

(j'ai connu que la 1.5 et la 1.6 pour la debug... -> projet)
Modérateur Logiciel - Programmation
 
 
 
Inutile de remonter un sujet vieux de 2006 !
Modérateur Logiciel - Programmation
 
 
     
14 messages
Filtrer ok

BE GEEK ! Avec Clubic Logo

flechePublicité