Fixer une taille pour tous les JtextField

doudinet - 5 mars 2013 à 16:03
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 - 7 mars 2013 à 16:07
Bonjour bonjour :D

Héyy , je suis bloquéeeeeeeeeeeee, je suis entrain de travailler sur une application déjà existante , je doit fixer la hauteur à 20 px de tous les champs texte "JTextField", mais cette application possède plus-que 2000 classes , et ce n est pas logique de parcourir toutes ces classes et les modifier manuellement. suit a cela j ai pensé a créer un module pour changer les champs de texte ,
ce module va chercher les composants de type JTextFiled puis forcer une hauteur a 20 px ,

*est ce que le module qui va être proposé doit être recopier dans toutes les classes java?
*est il possible de faire une classe indépendante et qui prend comme paramètre le nom de la modifier ??

Merci d'avance
Je vous attend
A voir également:

9 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
5 mars 2013 à 17:20
Salut,

Dans une application de 2000 classes, il serait temps de penser à faire des factory, plutôt que de faire des new(...) un peu partout ! Ça t'aurait permis de n'avoir qu'une ligne à modifier.

Tu peux créer une classe qui ressemble à ça :

package javafr;

import java.awt.Dimension;

import javax.swing.JTextField;

/**
 * exemple de fabrique de composants swing
 * 
 * @author Jonathan Guéhenneux
 */
public class ComponentFactory {

public static final ComponentFactory INSTANCE = new ComponentFactory();
private static final Dimension DEFAULT_TEXT_FIELD_DIMENSION = new Dimension(0, 20);

/**
 * constructeur privé pour implémenter la pattern singleton et éviter le gaspillage d'instances
 */
private ComponentFactory() {

}

/**
 * @return
 */
public JTextField createTextField() {

JTextField textField = new JTextField();
textField.setPreferredSize(DEFAULT_TEXT_FIELD_DIMENSION);
return textField;
}
}


Et remplacer les instanciations de JTextField par un appel à :
ComponentFactory.INSTANCE.createTextField()

La dernière étape pouvant être faite par un simple rechercher/remplacer global.

Sinon, il est bien entendu possible de faire un seul objet capable d'aller fouiller dans toutes les fenêtres de l'application pour changer la taille de tous les TextField, mais bon c'est moche quoi.
0
Bonjourrrr, merci beaucoup Jojolemariole ,
vraiment c est gentil de votre part
je vais essayer la solution que vous m avez proposé
je reviendrai pour vous dire qu'est ce que ça donne , a tte
0
JoJolemariole Help

j ai essayé d'implémenter le code que vous m'avez proposé , mais ça ne marche pas malheureusement , je ne sais pas s'il y a un prob au niveau du code ou bien un prob au niveau de l implémentation ( faute d’inattention ).
je vais vous montrer qu'est ce que j ai fait:
1) j ai gardé le même code que vous m'avez envoyé ComponentFactory.class
2) voila le code d'une classe aprés la modification




import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JTextField;


public class Swing2 {



public static void main(String argv[]) {

JFrame f = new JFrame("ma fenetre");
f.setSize(600, 400);


JTextField  testField1 = ComponentFactory.INSTANCE.createTextField();
testField1.setBounds(new Rectangle(5,5, 90, 17));

    JTextField  testField6 = ComponentFactory.INSTANCE.createTextField();
    testField6.setBounds(new Rectangle(90,5, 50, 33));

    JTextField  testField = ComponentFactory.INSTANCE.createTextField();
    testField.setBounds(new Rectangle(5,65,80,20));
    
    JTextField  testField3 = ComponentFactory.INSTANCE.createTextField();
    testField3.setBounds(new Rectangle(5,100,70,30)); 
  
      
    f.getContentPane().add(testField1);
    f.getContentPane().add(testField);
    f.getContentPane().add(testField3);
    f.getContentPane().add(testField6);
    
    f.setVisible(true);

  }
}





j'attend votre aide ,je suis coincée et le temps court
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
6 mars 2013 à 15:16
Salut,

Tu as bien implémenté ce que je t'avais proposé mais je ne savais pas que tu modifiais la taille des JTextField juste après ... :)

-> dans ta classe Swing2, tu ne redéfinis pas la layout manager de ta fenêtre, tes appels à setBounds ne seront donc pas vraiment pris en compte.
Il faut rajouter :
f.setLayout(null);

-> au vu de ce code, j'ai des doutes sur la solution, peux-tu nous montrer plus d'exemples, autrement dit est-ce que vous procédez toujours ainsi :
setBounds(newRectangle(...)) pour positionner vos composants ??
Si c'est le cas, c'est pas beau

-> dans l'immédiat, ce que je te propose maintenant que tu utilises la factory, tu ajoutes un classe qui va spécialiser la classe JTextField et tu modifies en conséquence la classe ComponentFactory :

package javafr;

import java.awt.Rectangle;

import javax.swing.JTextField;

/**
 * @author Jonathan Guéhenneux
 */
public class MyTextField extends JTextField {

private static final int HEIGHT = 20;

@Override
public void setBounds(int x, int y, int width, int height) {
super.setBounds(x, y, width, HEIGHT);
}

@Override
public void setBounds(Rectangle bounds) {
bounds.height = HEIGHT;
super.setBounds(bounds);
}
}


package javafr;

import javax.swing.JTextField;

/**
 * exemple de fabrique de composants swing
 * 
 * @author Jonathan Guéhenneux
 */
public class ComponentFactory {

public static final ComponentFactory INSTANCE = new ComponentFactory();

/**
 * constructeur privé pour implémenter la pattern singleton et éviter le gaspillage d'instances
 */
private ComponentFactory() {

}

/**
 * @return
 */
public JTextField createTextField() {
return new MyTextField();
}
}
0

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

Posez votre question
Coucou Jojolemariole,
Merci beaucoup ,cette solution est fonctionnelle , mais elle n est pas accepté malheureusement ,je n'ai pas le droit de modifier ou d'ajouter les instanciations dans le code originale , donc ce que je doit faire ==>
1) entrer le nom de la classe comme paramètre
2)parcourir la classe et chercher le JTexteField et modifier l'hauteur au fur et a mesure

Merciii JOJO , mais vraiment j'attend votre aide
0
J 'attend votre coup de pousse JOJO :)
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
7 mars 2013 à 14:42
Ah ? Je ne suis pas employé par Javafr, hein.
C'est quoi ton problème, parce que j'avais compris que tu avais résolu ton problème.
0
alors ,je dois créer une classe indépendante qui ressemble à ça .

Public class Champ_texte {
// etape1: Faire appel au frame java
parserJava

//etape2: parcourir les champs texte

//etape3: remplacer la hauteur des JTextField

}

Est il possible de faire un appel multiple de tous les frames dans la même classe ?
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
7 mars 2013 à 16:07
Re,

Je ne comprends toujours pas. Tu veux faire une classe indépendante, ok. Mais est-ce que tu veux changer le code source ou bien modifier la taille des textfield dynamiquement à l'exécution ?
0
Rejoignez-nous