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 :

affichage contenu on mouseEntered


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut affichage contenu on mouseEntered
    Bonjour le forum,

    dans un tableau de mon appli, les colonnes sont parfois trop petites pour afficher tout le contenu des cellules et j'aimerais qu'au passage de ma souris sur les cellules, le contenu complet de ma cellule apparaisse...

    J'ai un souci et je ne vois pas d'où il vient : lors du passage de ma souris sur une cellule, tout le texte contenu ne s'affiche pas....
    est-ce que quelqu'un peut m'aider?

    Thanks in advance,
    Bap

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    JComponent c = new JComponent() {
            public void paint(Graphics g) {
                boolean selected = table.isRowSelected(row);
                Component renderer = table.getCellRenderer(row, column).getTableCellRendererComponent(table, value, selected, true, row, column);
     
                c.setFont(table.getFont());
                Rectangle paintBounds = SwingUtilities.convertRectangle(table, bounds, this);
                SwingUtilities.paintComponent(g, renderer, this, paintBounds);
                if (selected) {
                    return;
                }
                g.setColor(Color.WHITE);
                ((Graphics2D) g).draw(paintBounds);
            }
        };
     
        /**
         * 
         * @param e
         */
        public void mouseEntered(MouseEvent e) {
            this.column = this.table.columnAtPoint(e.getPoint());
            this.row = this.table.rowAtPoint(e.getPoint());
            this.value = (String) this.table.getModel().getValueAt(this.row, this.column);
            this.bounds = this.table.getCellRect(this.row, this.column, true);
            if (!((DefaultTableCellRenderer) this.table.getCellRenderer(this.row, this.column)).getVisibleRect().contains(this.bounds)) {
                if (this.oldGlassPane == null) {
                    this.oldGlassPane = this.table.getRootPane().getGlassPane();
                    this.c.setOpaque(false);
                    this.table.getRootPane().setGlassPane(c);
                    this.c.setVisible(true);
                } else {
                    this.table.getRootPane().repaint();
                }
            } else {
                resetGlassPane();
            }
        }
     
        /**
         * 
         * @param e
         */
        public void mouseExited(MouseEvent e) {
            resetGlassPane();
        }
     
        private void resetGlassPane() {
            if (this.oldGlassPane != null) {
                this.c.setVisible(false);
                this.table.getRootPane().setGlassPane(this.oldGlassPane);
                this.oldGlassPane = null;
            }
        }

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut
    Re,

    petite précision, je fais le même traitement pour des Jtree et ça fonctionne...
    Par ailleurs, je ne veux pas de ToolTips mais bien que le contenu de ma cellule soit étendu par dessus la cellule de la colonne suivante.

    Peut-être y a-t-il une option des cellules de mon tableau pour que l'on puisse afficher le contenu total de mes cellules..?

    Merci d'avance,
    Bap

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut Jtree to Jtable
    Bonsoir,

    pour aider dans l'investigation de mon problème, voila ce qui fonctionne pour un Jtree et que j'aimerai convertir pour un Jtable :

    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
      //Get the path of the current node.
            this.path = this.tree.getPathForLocation(e.getX(), e.getY());
            //If there's no node, reset the current glass pane.
            if (this.path == null) {
                resetGlassPane();
            } else {
                this.row = this.tree.getRowForPath(this.path);
                this.bounds = this.tree.getPathBounds(this.path);
                //If a part of the node name is hiden, display the whole name.
                if (!this.tree.getVisibleRect().contains(this.bounds)) {
                    if (this.oldGlassPane == null) {
                        this.oldGlassPane = tree.getRootPane().getGlassPane();
                        //c is a bound containing the whole node name. Display it.
                        this.c.setOpaque(false);
                        this.tree.getRootPane().setGlassPane(c);
                        this.c.setVisible(true);
                    } else {
                        this.tree.getRootPane().repaint();
                    }
                } else {
                    //If the whole text of the node is visible, don't need a glass pane.
                    resetGlassPane();
                }
            }
    Bien évidemment les méthodes ne sont pas les même, ça serait trop facile !!
    Merci d'avance pour le coup de pouce,
    Bap

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Quelques éléments qui me paraissent bizarres, mais sans que je puisse assurer qu'ils sont en cause :
    • dans mouseEntered, si le glassPane est toujours l'ancien, tu en mets bien un nouveau; mais tu ne fais pas de repaint (es-tu sûr qu'il y ait besoin d'un nouveau glassPane, d'ailleurs ? )
    • dans le paint, tu sembles redessiner le renderer de la cellule sur le renderer de la cellule... je vois pas très bien l'objectif ? je ne vois même pas de changement de taille du composant renderer ?

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Par défaut mouseEntered -> mouseMoved
    Bonjour le forum, gifffftane,

    tout d'abord, j'ai fait une première erreur puisque c'est un mouseMoved et pas mouseEntered qu'il faut que j'utilise ici.

    dans mouseEntered, si le glassPane est toujours l'ancien, tu en mets bien un nouveau; mais tu ne fais pas de repaint (es-tu sûr qu'il y ait besoin d'un nouveau glassPane, d'ailleurs ? )
    Effectivement il est plus propore que j'ajoute this.table.getRootPane().repaint() à la fin de ma méthode resetGlassane(). En revanche, cella ne change pas le fonctionnement.

    dans le paint, tu sembles redessiner le renderer de la cellule sur le renderer de la cellule... je vois pas très bien l'objectif ? je ne vois même pas de changement de taille du composant renderer ?
    Dans le paint, je redessine le renderer pour un afficher un plus grand par dessus. Le but est qu'il contienne toute le contenu de ma cellule. Le dimessionnement de ce nouveau renderer se fait par le contenu (value) normalement avec la méthode getTableCellRendererComponent(table, value, selected, true, row, column);

    Je suis vraiment coincé... est ce que quelqu'un a une idée?
    Thanks in advance,

    Bap

Discussions similaires

  1. Affichage contenu d'un objet en mode DEBUG
    Par st20085 dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 07/09/2006, 10h36
  2. [HTML] problème d'affichage contenu
    Par loukili81 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/06/2006, 13h34
  3. [SQL] probleme d'affichage contenu de variables
    Par taka10 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/06/2006, 16h03
  4. Affichage contenu d'une variable dans JS
    Par tangjuncn dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2006, 14h38
  5. Réponses: 3
    Dernier message: 05/05/2006, 19h36

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