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

2D Java Discussion :

JGraph, modifier la couleur d'une cellule sélectionnée


Sujet :

2D Java

  1. #1
    Invité
    Invité(e)
    Par défaut JGraph, modifier la couleur d'une cellule sélectionnée
    Bonjour !

    J'utilise JGraph afin de créer un réseau formé de points définissants des zones dans une image.
    Comme les cellules du graphe n'ont pas besoin d'être redimensionnées, j'ai désactivé cette fonctionnalité, et ainsi masqué les poignées de redimensionnement.
    Afin d'indiquer qu'une cellule est sélectionnée, JGraph dessine une sorte de contour en pointillés blancs autour de cette cellule.
    Le problème est que ce contour est assez moche. J'aimerais donc à la place modifier la couleur de la cellule.

    Je ne sais pas si je dois plutôt :
    - réagir au clic sur le Graph, récupérer la cellule cliquée, puis en modifier la couleur ;
    - détecter un évènement de sélection, récupérer la cellule source et en modifier la couleur ;
    - ou bien implémenter mon propre VertexRenderer.

    Qu'en pensez-vous ?

    Axel

  2. #2
    Invité
    Invité(e)
    Par défaut
    Dans le même ordre d'idée, je voudrais changer la couleur d'une cellule au survol de la souris.
    J'ai une classe MyGraph qui hérite de JGraph et qui implémente MouseMotionListener.
    J'ai donc écrit le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        public void mouseMoved(MouseEvent e) {
            Point pos = e.getPoint();
            DefaultGraphCell cell = (DefaultGraphCell)getFirstCellForLocation(pos.x, pos.y);
            if (cell != null) {
                System.out.println("test");
                //cellSurvolee permet un retour à la couleur d'origine lorsqu'une cellule n'est plus survolée
                if (cellSurvolee != null)
                    GraphConstants.setBackground(cellSurvolee.getAttributes(), paramCouleurNds[0]);
                cellSurvolee = cell;
                GraphConstants.setBackground(cellSurvolee.getAttributes(), paramCouleurNds[1]);
            }
            else
                cellSurvolee = null;
        }
    Malheureusement, ça ne fonctionne pas...
    "test" s'affiche pourtant bien à chaque mouvement de la souris au dessus d'une cellule, mais aucun changement de couleur n'a lieu.
    Un repaint() n'a rien changé...

    Pensez-vous que je doive passer par un Renderer personnalisé, ou bien y a-t'il une erreur dans mon code ?

    Merci d'avance

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai fait quelques modif :

    J'ai créé une classe qui hérite de JScrollPane et qui contient les lignes suivantes :
    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
            editGraph = new MyGraph();
            setViewportView(editGraph);
     
            editGraph.addMouseMotionListener(new MouseMotionListener(){
     
                public void mouseDragged(MouseEvent e) {
                }
     
                public void mouseMoved(MouseEvent e) {
                    DefaultGraphCell v = (DefaultGraphCell)editGraph.getFirstCellForLocation(e.getX(), e.getY());
                    if (v != null) {
                        GraphConstants.setBackground(v.getAttributes(), Color.GREEN);
                    }
                }
     
            });
    Ca ne marche toujours pas, mais il y a une petite amélioration :
    quand je déplace une cellule du graphe, puis une autre, et que je relâche la souris, ces deux cellules (qui viennent donc d'être survolées) se colorent en vert.
    Il est logique qu'elles se colorent toutes les deux, étant donné que je n'ai rien écrit qui permette à une cellule qui n'est plus survolée, de revenir à sa couleur d'origine...
    Mais j'ai beau essayer repaint(), revalidate(), etc, je n'arrive pas à actualiser le graphe dès le passage de la souris sur une cellule !

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'ai encore fait quelques tests, notamment :
    getGraphLayoutCache().update(getGraphLayoutCache().getCellViews);

    mais ça ne marche toujours pas...
    Il n'y a que lorsque je déplace une cellule que l'affichage est actualisé et que les changements de couleur apparaissent.

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est bon, problème résolu,
    j'ai fait un getGraphLayoutCache().editCell(cellSurvolee, cellSurvolee.getAttributes());

    Idem pour les cellules sélectionnées, en réaction à un GraphSelectionEvent.

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

Discussions similaires

  1. Modifier la couleur d'une cellule
    Par KRis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/05/2008, 09h56
  2. Modifier la couleur d'une cellule
    Par karkass59 dans le forum Excel
    Réponses: 2
    Dernier message: 07/04/2008, 10h46
  3. Modifier la couleur d'une forme sélectionner
    Par Srh00 dans le forum C++Builder
    Réponses: 11
    Dernier message: 04/01/2008, 15h08
  4. Comment modifier la couleur d'une cellule d'un TStringgrid
    Par francois.delpierre dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/11/2007, 12h38
  5. [Word97 / Delphi6] Comment modifier la couleur d'une cellule ?
    Par Lolo1988 dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 29/10/2007, 10h48

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