IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[CellEditor] dédié et JtextField encapsulé dans un composant


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 28
    Par défaut [CellEditor] dédié et JtextField encapsulé dans un composant
    Hello,

    je développe un CellEditor dédié à un composant spécifique qui encapsule un JTextField, j'ai deux soucis avec cela, la touche F2 ne permet plus de rentrer en édition sur la cellule sélectionnée, et lorsque la cellule gagne le focus on ne peut pas éditer non plus directement la cellule sans au moins un clique souris (ce que permet le comportement par défaut du DefaultCellEditor).

    Il doit me manquer un listener et/ou un wrapping de certaines methodes, pour que les evenements liés au focus et la touche F2 soient transmis au JTextField encapsulé, mais je peine un peu là...je fouille dans le JTextField et le JTextComponent mais j'en perd un peu mon Java

    A noté que mon CellEditor fonctionne car si je remplace ce composant spécifique par un JTextField cela marche normalement.

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Montre du code, perso j'ai des CellEditor personnalisés et ça n'a jamais bloqué la touche F2.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 28
    Par défaut
    Citation Envoyé par natha
    Montre du code, perso j'ai des CellEditor personnalisés et ça n'a jamais bloqué la touche F2.
    Le problème ne vient pas du CellEditor mais du composant (qui hérite de JComponent) utilisé qui encapsule un JTextField, il faut que j'arrive a capturer les bons evenements dans ce composant et les rediriger vers le JTextField.

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Voici un exemple de code à moi (avec un Editor qui est un JPanel qui contient un JTextField).

    Ce que je dois récupérer comme evénement c'est lorsque que le CellEditor reçoit un stopCellEditing, je dois "commiter" la valeur de mon JTextField en forçant un focus lost.

    J'espère que ça t'aidera parce que perso c'est le seul événement que je dois forcer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class EmployeCellEditor extends AbstractCellEditor implements TableCellEditor {
     
    	/** The editor component */
    	private EmployeField efield;
     
    	/* (non-Javadoc)
    	 * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
    	 */
    	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    		if (!isSelected) {
    			return null;
    		}
    		efield = new EmployeField(new ValueHolder(value));
    		return efield;
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.swing.CellEditor#getCellEditorValue()
    	 */
    	public Object getCellEditorValue() {
    		return efield.getModel().getValue();
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.swing.CellEditor#stopCellEditing()
    	 */
    	@Override
    	public boolean stopCellEditing() {
    		efield.commitValue();
    		return super.stopCellEditing();
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class EmployeField extends JPanel implements PropertyChangeListener {
     
        /** TextField that contain the formatted text field */
        protected JFormattedTextField m_textField;
     
    [...]
     
        /**
         * Force the FOCUS_LOST => Commit the value
         */
        public void commitValue() {
            m_textField.dispatchEvent(new FocusEvent(m_textField, FocusEvent.FOCUS_LOST));
        }
     
    [...]
     
    }

  5. #5
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 28
    Par défaut
    Merci, ca m'a permis de voir qu'en fait le gars a pas mis de FocusListener sur le composant mais seulement sur le JtextField encapsulé.

Discussions similaires

  1. Problème d'affichage dans un composant TScrollBox
    Par erossi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/09/2005, 11h29
  2. Réponses: 4
    Dernier message: 27/07/2005, 11h51
  3. Les champs dans un composant ADOStorecProc
    Par ZIED dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/06/2005, 11h32
  4. Ecrire du texte en couleurs dans un composant
    Par wutang dans le forum Composants
    Réponses: 11
    Dernier message: 12/07/2004, 10h55
  5. Une image dans un composant ?
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo