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

 Java Discussion :

JTable, sélections délirantes


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut JTable, sélections délirantes
    Bonjour tous le monde,

    J'ai de nouveau un soucis. Promis j'ai vérifiié ce que je pouvais.

    Mon problème c'est que les sélection dans ma JTable sont complètement délirantes et pire encore, absolument aléatoires.

    Parfois la ligne est correctement sélectionnée, parfois la sélection va "prendre" une ligne ici + une ou deux cellules plus haut, ou plus bas.
    Parfois aucune sélection ne se fait et parfois ce sont des cellules dispersées qui sont sélectionnées.

    Bref, c'est un grand n'importe quoi.

    Ce n'est qu'un problème d'affichage, car systématiquement, la ligne est bien sélectionnée (j'ai un formulaire avec les données de la ligne qui s'affiche correctement à coté).

    Pourtant je veux une sélection tout ce qu'il y a de plus simple, une ligne à la fois.

    Voici comment j'ai paramétré ma JTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public MatosTab(final MatosModel md) {
    		super(md);
    		setDefaultRenderer(Object.class, new TabCellRenderer());
    		getTableHeader().setReorderingAllowed(false);
    		getTableHeader().setResizingAllowed(true);
    		setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		setRowSelectionAllowed(true);
    		setColumnSelectionAllowed(false);
    		setCellSelectionEnabled(false);
    		setShowVerticalLines(false);
    		setShowHorizontalLines(false);
    		setSelectionBackground(new Color(240, 216, 168));
    		setAutoResizeMode(AUTO_RESIZE_OFF);
    Merci

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    A mon avis le problème vient plus de ton Renderer qui ne marque pas forcément bien la sélection. Est-ce que le retour de la méthode getSelectedRows est correct?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Le résultat est toujours correct.
    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
    setHorizontalAlignment(SwingConstants.LEFT);
    setIcon(null);
    setText("");
    switch(col) {
    	case 0:	setIcon(Define.matosType[((_Matos) getValueAt(row, 0)).getRef()].getIcone()); break;
    	case 1:
    	case 2:
    	case 3:	super.getTableCellRendererComponent(table, val, isSelected, false, row, col); break;
    	case 4:	setHorizontalAlignment(SwingConstants.RIGHT);
    		setText(Define.EuroFormat.format(getValueAt(row, col))); break;
    	case 5:
    	case 6:
    	case 7:	setText(((Long) getValueAt(row, col)) == 0? "":Define.dateFormat.
    			format(((Long) getValueAt(row, col)))); }
    return this;

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour essayer de faire propre, il est préférable en général de s'appuyer sur le composant retourné par le super.getTableCellRendererComponent.

    Dans ton cas ça donnerait ça (les cas 1,2,3 n'ayant plus vraiment d'utilité):


    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
    JLabel l = (JLabel)     super.getTableCellRendererComponent(table, val, isSelected, false, row, col);
     
    l.setHorizontalAlignment(SwingConstants.LEFT);
    l.setIcon(null);
    l.setText("");
    switch(col) {
        case 0:    l.setIcon(Define.matosType[((_Matos) getValueAt(row, 0)).getRef()].getIcone()); break;    
        case 4:    l.setHorizontalAlignment(SwingConstants.RIGHT);
            l.setText(Define.EuroFormat.format(getValueAt(row, col))); break;
        case 5:
        case 6:
        case 7:    l.setText(((Long) getValueAt(row, col)) == 0? "":Define.dateFormat.
                l.format(((Long) getValueAt(row, col)))); 
    }
    return l;

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Tu as raison, c'est certainement plus propre.
    Je ferais comme ça dorénavant, merci.

    Mais ça ne règle pas le problème
    C'est toujours n'importe quoi lorsque je clique.

    Je viens de relancer l'exécution une dizaine de fois.

    Au dernier essai:
    1er clic ligne 2, colonne 3, ok
    2ème clic sur la ligne 2, colonne 3 et la:
    la ligne 2 reste sélectionnée sauf la cellule colonne 3 et 4
    et sélection de la colonne 3 et 4 de la ligne 3

    Mais ce n'est pas un comportement constant.
    Le plus souvent, aucune sélection n'apparait alors que mon formulaire se remplit correctement.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    As tu essayé de reformuler ton case en if/else?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JTable] Sélection et CheckboxRenderer
    Par virginie_ dans le forum Composants
    Réponses: 1
    Dernier message: 04/04/2015, 01h32
  2. [JTable] Sélections et déselections
    Par ludo2612 dans le forum Composants
    Réponses: 3
    Dernier message: 12/06/2008, 19h33
  3. [JTable] Sélection d'une Ligne
    Par lanfeustdetroll dans le forum Composants
    Réponses: 4
    Dernier message: 18/08/2005, 17h59
  4. [JTable] Sélection d'une seule cellule
    Par Amara dans le forum Composants
    Réponses: 2
    Dernier message: 01/06/2005, 14h48
  5. [JTable] sélection d'une colonne
    Par I o dans le forum Composants
    Réponses: 2
    Dernier message: 27/04/2005, 15h20

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