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 :

Zones dans un JComponent cliquable


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Points : 60
    Points
    60
    Par défaut Zones dans un JComponent cliquable
    Bonjour,

    tout est dans le titre ,

    J'ai une JFrame transparente et un Jcomponent ou il a des composants dessinés via Java2D. Il y a un fond , une petite image en logo, des rectangle avec du texte dedans...

    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
     Color c = g.getColor();
                            g.setColor(Color.gray);
                            g.fillRoundRect(0, 0, 600, 310, 30, 30);
                            g.setColor(Color.black);
                            g.fillRoundRect(5, 5, 590, 300, 30, 30);
                            g.setColor(Color.WHITE);
                            g.drawRoundRect(30, 45, 312, 40, 10, 10);
                            g.setColor(Color.WHITE);
                            g.drawRoundRect(30, 95, 312, 40, 10, 10);
                            g.setColor(Color.WHITE);
                            g.drawRoundRect(30, 144, 312, 40, 10, 10);
                            g.setColor(Color.WHITE);
                            g.drawRoundRect(30, 192, 312, 40, 10, 10);
                            g.setColor(Color.WHITE);
                            g.drawRoundRect(30, 240, 312, 40, 10, 10);
                            g.setColor(c);
     
                            int x = (getWidth() - image1.getWidth()) / 2;
                            int y = (getHeight() - image1.getHeight()) / 2;
                            g.drawImage(image1, 380, 34, this);
    les textes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     g2.drawString("Slot1 :", 50, 125);
                        g2.setColor(Color.RED);
                        g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 230, 125);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot2 :", 50, 174);
                        g2.setColor(Color.BLUE);
                        g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 230, 174);






    A l'appuie d'une touche que j'ai définie, je fait disparaître certain de ces éléments notamment le fond, l'image, les rectangles (ça devient en mode "overlay") et il me reste seulement les textes.


    Tout ceci est fonctionnel sans problème.



    La j'utilise des keylisteners pour utilise les fonctions de mon programme.

    Mais en plus de cela, je souhaiterai simplement définir des zone cliquable pour interagir aussi avec la souris et pas seulement le clavier.

    Les zones sont celle des 5 rectangles blanc définis dans le code plus haut.

    Cordialement

    Fred

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 867
    Points : 22 927
    Points
    22 927
    Billets dans le blog
    53
    Par défaut
    tu te créer des formes (Shape, Area, Rectangle, Rectangle2D, etc.) dont les coordonnées et tailles correspondent a celles que tu dessines a l’écran. Lorsque tu reçois un événement dans ton MouseListener, tu iras vérifier que les coordonnées de ta souris sont dans telle ou telle forme (méthode contains()) et tu activeras le code en conséquence.

  3. #3
    Membre du Club
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    je comprend le principe mais j'ai fouille pas mal de tuto et je ne comprend pas trop comment applique cela.

    Auriez vous un exemple de ceci qui me permettrai de mieux comprendre.


    Cordialement

    Fred

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 867
    Points : 22 927
    Points
    22 927
    Billets dans le blog
    53
    Par défaut
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.event.MouseEvent;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import java.util.Optional;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
    import javax.swing.event.MouseInputAdapter;
    import javax.swing.event.MouseInputListener;
     
    public final class Main extends JComponent {
     
        public static void main(String... args) {
            SwingUtilities.invokeLater(Main::start);
        }
     
        private static void start() {
            final JFrame frame = new JFrame("Test");
            frame.setSize(500, 500);
            frame.setContentPane(new Main());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
     
        private final Rectangle2D button = new Rectangle(50, 50, 100, 50);
        private boolean mouseDown = false;
        private final MouseInputListener mouseInputListener = new MouseInputAdapter() {        
            @Override
            public void mouseClicked(MouseEvent event) {
                if (button.contains(event.getX(), event.getY())) {
                    System.out.println("Click !");
                }
            }
     
            @Override
            public void mousePressed(MouseEvent event) {
                mouseDown = true;
                repaint();
            }
     
            @Override
            public void mouseReleased(MouseEvent e) {
                mouseDown = false;
                repaint();
            }
     
            @Override
            public void mouseEntered(MouseEvent event) {
                lastCoord = Optional.of(new Point(event.getX(), event.getY()));
                repaint();
            }
     
            @Override
            public void mouseMoved(MouseEvent event) {
                lastCoord = Optional.of(new Point(event.getX(), event.getY()));
                repaint();
            }
     
            @Override
            public void mouseExited(MouseEvent event) {
                lastCoord = Optional.empty();
                repaint();
            }
        };
     
        public Main() {
            super();
            addMouseListener(mouseInputListener);
            addMouseMotionListener(mouseInputListener);
        }
     
        private Optional<Point2D> lastCoord = Optional.empty();
     
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            final Graphics2D g2d = (Graphics2D) g.create();
            try {
                Color fill = Color.RED;
                if (lastCoord.isPresent() && button.contains(lastCoord.get())) {
                    fill = mouseDown ? Color.GREEN : new Color(0, 100, 0);
                }
                g2d.setColor(fill);
                g2d.fill(button);
            } finally {
                g2d.dispose();
            }
        }
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Merci, je vais étudie tout ca.

    Cordialement

    Fred

  6. #6
    Membre du Club
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Bonjour,


    J'ai reussi a "integre" quelque ligne du code que vous m'avez donné et reussi a faire fonctionne le click comme je le souhaite, du moins basiquement (j'ai click! qui s'affiche dans la console inttelij)

    Mais je suis confronte a un probleme que je n'arrive pas a résoudre depuis un bon moment.

    Lorsque j'inclus le code, ca fonctionne mais je ne peu plus bouge la fenetre que j'ai a l'ecran alors que sans l'ajout du code, je peu la déplace sans probleme a l'ecran.


    J'ai isole je pense le probleme a priori, lorsque que je supprime ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Test() {
            super();
     
            addMouseListener(mouseInputListener);
            addMouseMotionListener(mouseInputListener);
     
        }
    je recupere la mobilite de ma fenetre mais je perd les fonction des click...

    c'est ligne sont dans le code que vous m'avez fourni.

    Je possede deja une classe mouselistener qui me fait des mouvement de souris a l'ecran, un conflit avec celle ci??

    Merci

    Cordialement

    Fred

  7. #7
    Membre du Club
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Voici le code ou je cherche a integre les bouton clicable

    il sont en lieu des carre blanc





    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    package r1bellu2bl;
     
    import javax.imageio.ImageIO;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
     
    class Action extends JComponent  {
     
     
        private   BufferedImage image1;
     
     
     
        private final Font myFont = new Font("Serif", Font.BOLD, 30);
        private final Font myFont1 = new Font("Arial arrondi MT Bold", Font.BOLD, 10);
        private final Font myFont2 = new Font("Arial arrondi MT Bold", Font.BOLD + Font.ITALIC, 8);
     
        private final Font myFont3 = new Font("Serif", Font.BOLD, 24);
        private final Font myFont4 = new Font("Arial arrondi MT Bold", Font.BOLD, 9);
        private final Font myFont5 = new Font("Arial arrondi MT Bold", Font.BOLD + Font.ITALIC, 6);
     
        private final Font myFont6 = new Font("Serif", Font.BOLD, 18);
        private final Font myFont7 = new Font("Arial arrondi MT Bold", Font.BOLD, 8);
        private final Font myFont8 = new Font("Arial arrondi MT Bold", Font.BOLD + Font.ITALIC, 4);
     
        private final Font myFont9 = new Font("Serif", Font.BOLD, 12);
        private final Font myFont10 = new Font("Arial arrondi MT Bold", Font.BOLD, 7);
        private final Font myFont11 = new Font("Arial arrondi MT Bold", Font.BOLD + Font.ITALIC, 2);
     
        Action() throws IOException {
            String path1 = "src/images/ribellu.png";
            image1 = ImageIO.read(new File(path1));
     
        }
     
     
     
        public void paintComponent(Graphics g) {
        super.paintComponent(g);
            if (g instanceof Graphics2D) {
                switch (Main.size) {
     
                    case SIZE1:
                        if (Main.Overlay) {
     
     
     
                            Graphics2D g2 = (Graphics2D) g;
                            g2.setColor(Color.gray);
                            g2.fillRoundRect(0, 0, 600, 310, 30, 30);
                            g2.setColor(Color.black);
                            g2.fillRoundRect(5, 5, 590, 300, 30, 30);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 45, 312, 40, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 95, 312, 40, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 144, 312, 40, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 192, 312, 40, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 240, 312, 40, 10, 10);
                            g2.drawImage(image1, 380, 34, this);
                            g2.setFont(myFont2);
                            g2.setColor(Color.WHITE);
                            g2.drawString("V.1 by R1beLlu2B copyright©   ", 225, 294);
                            g2.setFont(myFont1);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F11: Resize", 106, 28);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F10: ModeOverlay", 184, 28);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F8: Arme", 294, 28);
                            g2.drawString("F7: Viseur", 358, 28);
                            g2.setColor(Color.WHITE);
                            g2.drawString("Num1: Slot1", 422, 28);
                            g2.setColor(Color.WHITE);
                            g2.drawString("Num2: Slot2", 497, 28);
     
     
     
     
                        }
     
    .......

Discussions similaires

  1. Suppression d'une zone dans Excel par Access
    Par asterpc dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/11/2007, 18h48
  2. Time zone dans une date
    Par renotm dans le forum SQL
    Réponses: 1
    Dernier message: 08/12/2006, 13h10
  3. Selectionner une zone dans une TImage
    Par bahiatoon dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/11/2006, 20h36
  4. [D6] Algo de détection de zones dans une image
    Par DMO dans le forum Langage
    Réponses: 4
    Dernier message: 25/11/2005, 16h15

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