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

Composants Java Discussion :

[SWING]jTable + Focus [FAQ]


Sujet :

Composants Java

  1. #1
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Points : 74
    Points
    74
    Par défaut [RESOLU][SWING]jTable + Focus
    Bonjour tout le monde , j’ai une jTable de deux colonnes. Le comportement que je recherche, c’est quand j’appuie sur flèche droit ou gauche que le focus qui se déplace seulement sans qu’elle sélectionne la rangée et j’aimerais garder la renderrer par défauts. Donc si quelqu’un a une idée. Donc commennt déplacer seulement le focus de colonne merci.

  2. #2
    Candidat au Club
    Inscrit en
    Novembre 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Information
    salut , j'aimerais bien t'aider mais je ne comprend pas vraiment ce que tu desire faire , ce que jai compris c'est que tu veux te deplacer de gauche a droite sans selectionner la ranger mais la colonne au complet?

  3. #3
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Points : 74
    Points
    74
    Par défaut
    oui déplacé le focus qui est un carré qui entoure la celulle, elle est en orange pas pleine. La selection colore la celulle en blue et elle est pleine.
    Donc déplacé le focus sans selectionner la rangée.

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut renderer
    Tu peu utiliser un renderer, pour la gestion des fleche , le JTable le fait deja donc te reste juste a detecter qui a le focus pour ceci tu peu utilie un param de ce fonction, pour la colonne va falloir un petit fonction que te retourne tout les row d'une colonne , je ne sais pas si c'est deja inclue quelque part dans l'api de java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {
     
            if(hasFocus){
                 //mettre ton code ici pour les couleur
            }
            else{
                  //remet la cellule comme avant
            }
    }

  5. #5
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Points : 74
    Points
    74
    Par défaut
    Salut ,c'est ce que j'ai
    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
     
     
     class RendererConsutl extends JLabel implements TableCellRenderer
    {
     
     
    public RendererConsutl()
    {
      super();
      setOpaque(true);
    }
     
    public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,
                                                   boolean hasFocus,int row,int column)
    {
      Component rend = DEFAULT_RENDERER.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
      Color backGround =null;
      this.setBackground(Color.white);
      if (isSelected)
       this.setBackground(new Color(182,177,197));
      if (hasFocus)
       this.setBackground(new Color(227,222,242));
       setText((String)value);
      return this;
    }
    }
    mon probleme vient du fait que je sais pas comment déplacer le focus sans faire de selection .

  6. #6
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Points : 74
    Points
    74
    Par défaut solution
    Malix13 m'a donnée comme idée de solution

    Il s'est cré son renderer mais qui extendais un JToggleBouton ,

    en gros quest-ce que ca fait , c'est un tableau de JToggleButton , un carre bleu ce promene dedans pour le focus , et quand on apuis sur Enter ou le carre bleu est , ca selectionne le toggleButton(qui change de couleur)

    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
    34
    35
    36
    37
    38
    39
    40
     
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
            boolean hasFocus, int row, int column) { 
                //cmd_button instance de JToggleBouton 
                cmd_Button.setText(String.valueOf(label[row] [column])); 
                //verifie si c'est un instance de boolean pour la selection du composant 
                if (value instanceof Boolean) { 
                    Boolean b = (Boolean)value; 
                    cmd_Button.setSelected(b.booleanValue()); 
                } // fin de if (value instanceof Boolean) 
                else { 
                    cmd_Button.setSelected(false); 
                } // fin de cas echant 
     
                // verifie si la cellule a le focus 
                if (isSelected) { 
                    //label[][]= tableau de texte qui doit etre afficher sur le toggle 
                    cmd_Button.setText(String.valueOf(label[row] [column])); 
                } // fin de if(isSelected) 
     
                if (hasFocus && !cmd_Button.getText().equals("")) { 
                    //le composant demande le focus 
                    table.requestFocus(); 
     
                    //on ca chercher l'editor pour le stoper , pour enlever 
                    //le carrer bleu 
                    TableCellEditor editor = table.getCellEditor(); 
                    if(editor != null){ 
                   editor.stopCellEditing(); 
                    } 
     
                    //on ajuste le border du composant 
                    cmd_Button.setBorder(BorderFactory.createLineBorder(Color.blue, 2)); 
     
                } // fin de if ( hasFocus ) 
                else { 
                    //remet le border par defaut au composant 
                    cmd_Button.setBorder(BorderFactory.createEtchedBorder()); 
                } // fin de cas echant 
                return cmd_Button;

    Pour ma part j'ai opté pour ne pas s'occuper de la selection
    dans le renderer

    Faire un HashMap(filtre) et quand je viens sur enter ou clique de la souris, j'ajoute la ligne et dans mon renderer, je m'occupe du focus et du filtre

    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
     
     
    public boolean isFiltrer(Object value,int row,int column) 
    { 
        if (column==1) 
          value = getGpConsultTable().getValueAt(row,0); 
       //selectedCode qui est un haspMap 
       return (selectedCodes.containsKey((String)value)); 
    } 
     
    public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected, 
                                                   boolean hasFocus,int row,int column) 
    { 
      Component rend = DEFAULT_RENDERER.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column); 
        this.setBackground(Color.white); 
      if (hasFocus) 
       this.setBackground(new Color(227,222,242)); 
      if (isFiltrer(value,row,column)) 
          this.setBackground(new Color(182, 177, 197)); 
    setText((String)value); 
      return this; 
    } 
    }
    et merci a tout le monde.

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/07/2011, 16h22
  2. [Swing]JTable- Dimensionner les colonnes
    Par loutfi dans le forum Composants
    Réponses: 12
    Dernier message: 01/07/2011, 08h50
  3. [Swing / JTable] Rendre les cellules d'un JTable non éditables
    Par Jérôme_20 dans le forum Composants
    Réponses: 20
    Dernier message: 10/02/2011, 10h32
  4. [SWING][JTable]Cacher noms des colonnes
    Par Antunes dans le forum Composants
    Réponses: 2
    Dernier message: 28/06/2004, 11h48
  5. [Debutant][Swing][Jtable]Peut-on avoir 2 forecolor ?
    Par britou dans le forum Composants
    Réponses: 7
    Dernier message: 14/05/2004, 15h03

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