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

3D Java Discussion :

[Java3D] Canvas3d et JScrollpane


Sujet :

3D Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 37
    Points
    37
    Par défaut [Java3D] Canvas3d et JScrollpane
    Bonjour!

    Tout d'abord, je dois vous dire que je deviens fou avec cette histoire..

    Je m'explique, j'ai une JFrame, dans laquelle j'ai créé un canvas3d dans lequel se trouve un objet3d. Jusque la tout va bien, l'utilisateur a la possibilité d'effectuer des rotations, des zooms et des translations sur cette objet.

    C'est la que ca se complique, sachant que l'utilisateur peut faire sortir l'objet de la fenêtre si il le translate trop maladroitement, j'ai voulu installer un JScrollpane dans cette frame, histoire que ce soit plus simple, plus ergonomique.

    J'ai donc ajouté le canvas3d dans un Jscrollpane puis ajouté le JScrollpane dans la JFrame.

    Ça fonctionne, mes scrollbars apparaissent mais quand je les utilise, le repaint du canvas fonctionne mal puisque je ne vois que du gris sur les parties que je fais apparaitre en scrollant, de plus le canvas vient se superposer à ma JMenubar.. Horrible..

    Après pas mal de recherches sur le net, de multiples tests, toujours rien..

    Merci d'avance pour votre aide..

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Le canvas3d est une classe AWT. De fait pas hyper compatible avec le Stack Swing (notion de composants heavyweight-lightweight).

    Toutefois à partir de java6 update 12 les possibilités de mix entre AWT et Swing on été améliorées, cf http://java.sun.com/developer/techni...nts/index.html

    L'autre solution pour toi étant d'utiliser un ScrollPane AWT au lieu d'un JScrollPane.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    Ça va beaucoup mieux avec la classe Scrollpane sauf que désormais, mon menu refuse de s'afficher après avoir effectué un scroll..

    Merci de ton aide.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ton menu est aussi un composant lightweight par défaut, il faut donc lui indiquer qu'il doit passer en heavyweight:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonMenu.setLightWeightPopupEnabled(false);
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par sinok Voir le message
    Ton menu est aussi un composant lightweight par défaut, il faut donc lui indiquer qu'il doit passer en heavyweight:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonMenu.setLightWeightPopupEnabled(false);
    Mon menu est une JMenuBar, sur quel composant je dois appliquer cette méthode?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Je te conseille vraiment de lire le lien que je t'ai donné dans ma réponse initiale.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par sinok Voir le message
    Je te conseille vraiment de lire le lien que je t'ai donné dans ma réponse initiale.
    Ok, je me lance!

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    Bon bah j'ai lu, je pense avoir bien compris le soucis des composants heavy et light.

    Mais je suis pas un pro en anglais et j'ai l'impression qu'ils disent que ce probleme est résolu depuis la version JDK 6.12:

    As of the JDK 6 Update 12 and JDK 7 build 19 releases, it is now possible to seamlessly mix heavyweight and lightweight components within the same container. The following screen captures show the same three examples, run under the JDK 7 release, with no changes to the code. In each case, it just works.
    Et que sans changer le code, ca fonctionne..
    Dans mon cas, le menu ne s'affiche que de temps en temps..

    Que faire?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Quelle version de java utilises tu?

    Sinon pour tes menus le truc est de faire l'appel suivant pour chaque JMenu que tu mettras dans ta JMenuBar:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monMenu.getPopupMenu().setLightWeightPopupMenuEnabled(false);
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    Bah ma version, je l'ai mise à jour il y a une semaine, c'est la :

    jdk1.6.0_21

  11. #11
    Membre régulier Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Points : 109
    Points
    109
    Par défaut
    Attention aussi aux tooltips qui peuvent être associés aux menus. Même principe mais en utilisant l'instance qui va bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);

Discussions similaires

  1. [Java3d] JInternalFrame sur Canvas3d
    Par JuFromParis dans le forum 3D
    Réponses: 2
    Dernier message: 13/04/2011, 10h02
  2. Réponses: 5
    Dernier message: 03/03/2010, 15h23
  3. InternalFrame & Canvas3D sous Java3D
    Par slim_java dans le forum 3D
    Réponses: 4
    Dernier message: 03/09/2009, 21h14
  4. [java3D][collision]
    Par geofun dans le forum 3D
    Réponses: 7
    Dernier message: 12/02/2007, 14h49
  5. [Java3D] Récuperer une image à partir d'un canvas3D
    Par laurent.c123 dans le forum 3D
    Réponses: 3
    Dernier message: 05/05/2006, 18h35

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