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

Interfaces Graphiques en Java Discussion :

Peut-on créer des composants graphiques non rectangulaires?


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut Peut-on créer des composants graphiques non rectangulaires?
    Bonjour à tous,

    Je travaille avec swing, et je crée des petits composants graphiques sur une interface.

    Si j'ai bien tout compris, les composants graphiques apparaissent, grâce à leur contenu définis par les méthodes :
    - setSize(.....), qui définit la taille du rectangle sur l'écran.
    - setLocation(....), qui définit la position de cette zone de dessin dans le conteneur parent.

    Cela fonctionne certes, mais comment travailler mieux, avec des composants qui ne sont pas des rectangles??

    Exemple : un ballon.
    Nom : ballon2.png
Affichages : 115
Taille : 108,5 Ko


    En fait, pour le programme, toute la zone définie pour le dessin fait partie du composant.
    Si je fais un "clic_1" sur le ballon, ou "un clic_2" légèrement en dehors du ballon, cela entraine la même interprétation, et ça devient moins fonctionnel...
    En effet, que l'on clique sur le ballon, ou à coté, dans la zone de définition de l'objet, l’interprétation sera la même...

    Mes questions sont donc les suivantes :

    1/ Swing permet-il de définir, dans la zone de représentation d'un objet, une zone "cliquable" ou "non cliquable"??

    2/ Cette problématique peut-elle être résolue dans Swing, ou suis-je condamné à n'utiliser que des rectangles?

    3/ Quelqu'un sait-il quel autre environnement graphique pourrait permettre la gestion d'objet de formes quelconques?

    4/ Les logiciels qui permettent de cliquer sur un objet de forme quelconque sont pourtant nombreux.
    Quel est leur principe d'interprétation, au niveau des formes des objets graphiques?


    Merci à tous ceux qui ont ces connaissances et qui prendront la peine de m'orienter un peu...

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    1. A toi de faire les calculs appropriés pour traiter les événements souris uniquement quand tu es dans la bonne zone. Si tu utilises un listener positionne a l’extérieur du composant, rajoute plutôt un callback qui sera invoqué par listener interne au composant apres avoir detecte si on est dans la bonne zone.

      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
      class monBallon {
       
      setMouseListener(new MouseAdapter() {
          public void mouseClicked(MouseEvent event) {
              if (dansLeBallon) {
                  Optional.ofNullable(getCallBackDansLeBallon())
                      .ifPresent(cb -> cb.invoke());
              }
          }
      });
       
      public Truc getCallBackDansLeBallon() { ... } 
       
      public void setCallBackDansLeBallon(Truc truc) { ... }
       
      }
    2. Voir ci-dessus.
    3. JavaFX le fait (via un flag a placer sur un noeud pour que les zones non opaques soient transparente a la souris et il est aussi possible de specifier des masques et des clip). Aucune idee pour SWT ou les autres environnement graphiques Java.
    4. Voir response 1. Tu fais les calculs appropries et basta.

  3. #3
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut merci bouye
    merci bouye pour les infos.

    Je vais essayer d'utiliser cela pour mon interface avec swing.

    Il me semble également très intéressant de disposer de composants, dont la zone transparente peut être ignorée par la souris. Je vais donc également me documenter sur javaFx qui semble permettre cela.

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

Discussions similaires

  1. Créer des composants graphiques lors d'un clique sur un bouton
    Par a.collery dans le forum Composants graphiques
    Réponses: 15
    Dernier message: 04/07/2016, 15h05
  2. Créer des composants spécifiques en utilisant l'interface graphique native
    Par mgoudet dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 24/01/2011, 11h29
  3. Réponses: 3
    Dernier message: 21/10/2010, 15h58
  4. Réponses: 4
    Dernier message: 19/10/2010, 20h38
  5. [Robot] rendre des composants graphique non capturables
    Par LeTripeurFou dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 15/01/2009, 10h05

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