Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1532 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Cliquer dans une zone en forme d'anneau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Cliquer dans une zone en forme d'anneau

n°1683670
ut2k3
Posté le 07-02-2008 à 21:31:16  profilanswer
 

Bonjour à tous
J'ai besoin de vous. Je voudrais cliquer par exemple dans le petit cercle vert au centre pour afficher le chiffre 25 sans que quand je clique sur le petit cercle rouge il m'affiche aussi 25.
Je vous met l'image de ma cible ainsi que le code
 http://img240.imagevenue.com/loc127/th_15772_cible_122_127lo.JPG
 
Code :  
 
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
 
public class Plateau extends JPanel implements Runnable, MouseListener
{
    public int x,y,i,j;
     
    public int b501,b502;
    public int b251,b252;
    public int bs11,bs12;
    public int bt1,bt2;
    public int bs21,bs22;
    public int bd1,bd2;
     
    public int taille,rayon;
    public float larg2,haut2;
    public Font chiffre;
    public String nb[] = {"6","10","15","2","17","3","19","7","16","8","11","14","9","12","5","20","1","18","4","13"};
    private Thread t;
 
 public Plateau(int x, int y, int dim)
    {
        this.x = x;
        this.y = y;
        taille = dim;    
        addMouseListener(this);
    }
     
    public void init()
    {
         
    }
     
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 =(Graphics2D) g;
        chiffre = new Font("Courier", Font.BOLD, 40);
        larg2 = haut2 = taille/2;
        rayon = 280;
         
        //MODE Qualite et Anti-Aliasing
        RenderingHints qualityHints = new RenderingHints
        (
        RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON
        );
        qualityHints.put
        (
        RenderingHints.KEY_RENDERING,
        RenderingHints.VALUE_RENDER_QUALITY
        );
        g2.setRenderingHints(qualityHints);
         
         
         
        g2.setColor(Color.lightGray);
        g2.fillOval(x, y, taille, taille);
       
        g2.setColor(Color.red); //zone double
        for(i=0;i<360;i=i+36)
            g2.fillArc((taille/2)-(taille/5*2),(taille/2)-(taille/5*2),(taille/5*4),(taille/5*4),i+9,18);
             
        g2.setColor(Color.green); //zone double
        for(i=0;i<360;i=i+36)
            g2.fillArc((taille/2)-(taille/5*2),(taille/2)-(taille/5*2),(taille/5*4),(taille/5*4),i-9,18);
             
        g2.setColor(Color.black); //zone simple 1
        for(i=0;i<360;i=i+36)
            g2.fillArc((taille/2)-(taille/27*10),(taille/2)-(taille/27*10),(taille/27*20),(taille/27*20),i+9,18);
             
        g2.setColor(Color.white); //zone simple 1
        for(i=0;i<360;i=i+36)
            g2.fillArc((taille/2)-(taille/27*10),(taille/2)-(taille/27*10),(taille/27*20),(taille/27*20),i-9,18);
             
        g2.setColor(Color.red); //zone triple
        for(i=0;i<360;i=i+36)
            g2.fillArc((taille/2)-(taille/19*5),(taille/2)-(taille/19*5),(taille/19*10),(taille/19*10),i+9,18);
             
        g2.setColor(Color.green); //zone triple
        for(i=0;i<360;i=i+36)
            g2.fillArc((taille/2)-(taille/19*5),(taille/2)-(taille/19*5),(taille/19*10),(taille/19*10),i-9,18);
             
        g2.setColor(Color.black); //zone simple 2
        for(i=0;i<360;i=i+36)
            g2.fillArc((taille/2)-(taille/42*10),(taille/2)-(taille/42*10),(taille/42*20),(taille/42*20),i+9,18);
             
        g2.setColor(Color.white); //zone simple 2
        for(i=0;i<360;i=i+36)
            g2.fillArc((taille/2)-(taille/42*10),(taille/2)-(taille/42*10),(taille/42*20),(taille/42*20),i-9,18);
         
        g2.setColor(Color.green); //centre 25
        g2.fillOval((taille/2)-(taille/24),(taille/2)-(taille/24),(taille/12),(taille/12));
         
        g2.setColor(Color.red); //centre 50
        g2.fillOval((taille/2)-(taille/48),(taille/2)-(taille/48),(taille/24),(taille/24));
    }
 
    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
 
    public void run()
       {
               try{
                       while (t.isAlive())
                       {
                       //t.sleep(100);
                       }
 
                       t.sleep(1);
                       }catch(InterruptedException e){}
       }
}
 
PS : il se peut qu'il y ait des erreurs et la cible se trouve dans une JFrame

mood
Publicité
Posté le 07-02-2008 à 21:31:16  profilanswer
 

n°1684520
uchimizu
Posté le 10-02-2008 à 08:55:40  profilanswer
 

Bonjour,
 
a mon avis, tu es parti pour faire un peu de geometrie. Une zone de ta cible se definit par deux choses:
- la distance au centre;
- l'angle par rapport a l'horizontal.
 
calculer la distance au centre est simple: distance= sqrt((xsouris-xcentre)^2+(ysouris-ycentre)^2). Avec cela, tu peux deja tester les deux cercles du centre: ce seront des conditions du type:
 
si (distance<rayoncerclerouge) => je suis dans le cercle rouge
si ((distance>=rayoncerclerouge) et (distance<=rayoncerclevert) => je suis dans l'anneau vert.
 
Pour les autres zones, tu devras faire des tests sur le rayon et sur l'angle. A mon avis, fais des tests sur le sinus et le
cosinus de l'angle. Pour rappel, voici les formules
 
monsinus=(ysouris-ycentre)/distance;
moncosinus=(ysouris-ycentre)/distance;
 
si tu veux tester que ta souris est dans un angle entre 10 et 20 degres, testes les conditions suivantes.
si sinus(10)<monsinus<sinus(20) et cosinus(20)<moncosinus<cosinus(10)=>  je suis dans la zone entre 10 et 20 degres.
 
Attention, ce test n'est valable qu'entre 0 et 90 degres, apres, il faut inverser les comparaisons pour des problemes
de signe.
 
Tu peux evidemment combiner des tests sur le rayon et sur l'angle pour avoir chacune de tes zones.
 
Bonne trigonometrie.
 
[quotemsg=1683670,1,625080]Bonjour à tous
J'ai besoin de vous. Je voudrais cliquer par exemple dans le petit cercle vert au centre pour afficher le chiffre 25 sans que quand je clique sur le petit cercle rouge il m'affiche aussi 25.


---------------
Un blog sur le Japon: http://uchimizu.blogspot.com/
n°1684631
ut2k3
Posté le 10-02-2008 à 19:39:35  profilanswer
 

Merci beaucoup je vais tester cette methode
 
PS : j'aime pas les maths :??:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Cliquer dans une zone en forme d'anneau

 

Sujets relatifs
menu (onglet) et faire apparaître dans une zonecomment executer une macro sur une zone selectionnée
Tri à bulle (forme recursif)!!!!!!!VBE definir zone avec un nom
[VBA-Access]Problème format dans une zone de texteImage survolée avec une zone réactive?
Zone membre: le client choisi lui même ses membresExcel: imposer une mise en forme selon valeur dans une case
Zone d'édition de texte / Mode colonesCréer une zone membre et zones de commentaires
Plus de sujets relatifs à : Cliquer dans une zone en forme d'anneau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR