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

AWT/Swing Java Discussion :

Swing + Applet


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut Swing + Applet
    Bonjour,

    j´essaie tant bien que mal de développer une applet qui affiche dans une zone de dessin une map monde sur laquelle j´affiche des choses.

    J´utilise un border layout et j´ai placé la zone de dessin en son centre.
    j´ai crée aussi une barre d´outils avec un bouton pour le moment.
    J´ai juste essayé de tester si je pouvais placer cette barre d´outils dans les parties nord et sud du layout mais ca ne marche pas correctement lorsque j´observe le résultat sur une page web !
    Les boutons sont masquées et n´apparaissent que lorsque la souris passe dessus ! Le premier bouton (Nord) apparait superposé sur la zone de dessin. De plus, la zone de dessin ne parait pas centrée comme les boutons.

    Source de l´applet :

    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
     
    import java.awt.*;
    import javax.swing.*;
     
     
    public class EcotypeMap extends JApplet   {
     
    	// Constantes de dimensions de l'applet
    	private static int HAUTEUR = 550;
    	private static int LARGEUR = 750;
     
    	// Attributs
    	private boolean mustStop;
    	Image map;
    	BarreOutils toolBar = new BarreOutils();
    	ZoneMap screen;
     
    	public void init() {
     
    	setPreferredSize(new Dimension(LARGEUR,HAUTEUR));
     
    	// Chargement de l'image de la MapMonde
    	map = getImage(getCodeBase(),"map.gif");
     
    	screen = new ZoneMap(map);
     
    	// Placement des différentes parties de l'applet
    	this.getContentPane().setLayout(new BorderLayout(2,2));
    	this.getContentPane().add(toolBar,"North");
    	this.getContentPane().add(screen,"Center");
    	this.getContentPane().add(new BarreOutils(),"South");
     
    	}
     
     
    	public void paint(Graphics gc) {
     
    		// Affichage de la MapMonde
    	//	screen.afficheMap(gc);
     
    	}
    Code de la zone de dessin :

    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
     
    import java.awt.*;
    import javax.swing.*;
     
    public class ZoneMap extends JPanel {
     
     
    	// Attributs de la classe
    	private Image map;
    	private int sizeX = 652, sizeY = 392;
     
    	// Correspond aux longitude et latitude (valeurs réelles)
    	private double xInf = -175 , yInf = -90;
    	private double xSup =  +175 , ySup =  +90;
     
    	public ZoneMap(){
     
    		setBackground(Color.cyan);
     
    	}
     
    	public ZoneMap(Image map){
     
    		// Image de la mapmonde
    		this.map = map;
     
    	}
     
    	// Méthodes de la zone d'affichage
     
    	// Méthodes pour la conversion des coordonnées cartographiques en pixels
    	private int coordToPixX(double x) {
    		return (int)(sizeX * (x-xInf)/(xSup-xInf));
    	}
     
    	private int coordToPixY(double y) {
    		return sizeY-(int)(sizeY * (y-yInf)/(ySup-yInf));
    	}
     
     
    	// Affichage simple de la carte
    	public void afficheMap(Graphics gc) {
     
    		//Affichage de la mapmonde
    		gc.drawImage(map,0,0,652,392,this);
     
    	}
    Code de la barre d´outils :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import javax.swing.*;
     
    public class BarreOutils extends JPanel {
     
    	public BarreOutils(){
     
    		JButton erase = new JButton("Erase"); 
    		this.add(erase);
    	}
     
     
    }
    En testant avec une fenetre classique (donc sans applet), l´affichage des boutons est correct donc que peut-il manquer ?

    Merci d´avance.

  2. #2
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    premièrement dans ton code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Placement des différentes parties de l'applet 
    this.getContentPane().setLayout(new BorderLayout(2,2)); 
    this.getContentPane().add(toolBar,"North"); 
    this.getContentPane().add(screen,"Center"); 
    this.getContentPane().add(new BarreOutils(),"South");
    Tu as meilleurs temps d'utilisé les constantes dans la classe BorderLayout... ce qui va te donné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Placement des différentes parties de l'applet 
    this.getContentPane().setLayout(new BorderLayout(2,2)); 
    this.getContentPane().add(toolBar,BorderLayout.NORTH); 
    this.getContentPane().add(screen,BorderLayout.CENTER); 
    this.getContentPane().add(new BarreOutils(),BorderLayout.SOUTH);

    deuxièmement, tu as redéfini la méthode paint (dans EcotypeMap) qui ne fait rien... donc normalement rien ne devrait s'afficher !!! essai de l'enlevé pour voir...

  3. #3
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Désolé,

    effectivement, la méthode paint ne semble rien faire ici mais c´est parce qu´au moment de faire mon copier-coller, j´ai supprimé des lignes mais le paint avec l´appel de la méthode afficheMap permet bien d´afficher la map monde !

    Je ne vois pas trop là !

  4. #4
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    oki alors essai comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       public void paint(Graphics gc) { 
     
          // Permet de dessiner l'applet
          super.paint(gc);
     
          // Affichage de la MapMonde 
          screen.afficheMap(gc); 
     
       }

  5. #5
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    code]
    super.paint(gc);
    [/code]
    invoque la méthode paint de sa super classe JApplet ?

    En tout cas, rien ne se passe !

    Je ne sais pas ce que j´ai bricolé mais la barre d´outils "South" ne s´affiche plus maintenant !

  6. #6
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par BARBIER
    invoque la méthode paint de sa super classe JApplet ?
    Oui


    et est ce que ce code la tout seule fonctionne:

    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
     
    public class EcotypeMap extends JApplet   {
     
     
       public void init() {
     
     
    	   // Chargement de l'image de la MapMonde
    	   ImageIcon map = new ImageIcon(getImage(getCodeBase(),"map.gif"));
    	   JLabel screen = new JLabel(map);
     
    	   JButton erase = new JButton("Erase");
     
     
     
    	   // Placement des différentes parties de l'applet
     
    	   Container c = getContentPane();
    	   c.setLayout(new BorderLayout(2,2));
     
    	   c.add(erase, BorderLayout.NORTH);
    	   c.add(screen,BorderLayout.CENTER);
    	   c.add(erase, BorderLayout.SOUTH);
     
       }
    }
    Si oui, essai de te basé la dessus

  7. #7
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Tout s'affiche sauf le boution erase "North" !

    C'est quand même bizarre cette histoire ! Est-ce que BorderLayout fait mauvais ménage, dans ce cas, avec les applets ?

  8. #8
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par BARBIER
    Tout s'affiche sauf le boution erase "North" !

    C'est quand même bizarre cette histoire ! Est-ce que BorderLayout fait mauvais ménage, dans ce cas, avec les applets ?
    Ha ouais c'est normal... en faite tu peux pas mettre le meme objet dans un meme panel...

    essai comme ca:

    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
     
    public class EcotypeMap extends JApplet   { 
     
     
       public void init() { 
     
     
          // Chargement de l'image de la MapMonde 
          ImageIcon map = new ImageIcon(getImage(getCodeBase(),"map.gif")); 
          JLabel screen = new JLabel(map); 
     
          JButton erase1 = new JButton("Erase"); 
          JButton erase2 = new JButton("Erase"); 
     
     
     
          // Placement des différentes parties de l'applet 
     
          Container c = getContentPane(); 
          c.setLayout(new BorderLayout(2,2)); 
     
          c.add(erase1, BorderLayout.NORTH); 
          c.add(screen,BorderLayout.CENTER); 
          c.add(erase2, BorderLayout.SOUTH); 
     
       } 
    }

  9. #9
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Et non, ça ne change rien !

  10. #10
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Mais si, en fin de compte, ça marche : c'est mon navigateur qui ne faisait pas les mises à jours de mes changements !

    Par contre, en faisant comme tu fais avec un JLabel pour ma carte, je ne peux plus y afficher mes entrées comme dans ma zone de dessin initiale.

    Réussir à pouvoir coller tout (Zone de dessin -> JPanel + les reste) dans la même applet doit bien être faisable.

    Ca m'énerve de devoir chercher un truc qui parait si basique !

  11. #11
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par BARBIER
    Par contre, en faisant comme tu fais avec un JLabel pour ma carte, je ne peux plus y afficher mes entrées comme dans ma zone de dessin initiale.
    Je vois pas trop ce que tu veux dire là... ???


    Mais tu n'es pas obliger d'utilisé un JLabel... tu peux essayer d'adapter les codes pour faire ce que tu veux...

  12. #12
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Ce que je veux dire, c'est que si je voulais juste afficher une image, ça irait mais je veux non seulement en afficher une et ensuite dessiner dessus des points particuliers propres à des coordonnées géographiques.

    C'est pour ça que je ne vois pas comment faire autrement que ce que j'avais commencé à faire.

  13. #13
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    ha oki...

    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
     
    public class EcotypeMap extends JApplet   { 
     
     
       public void init() { 
     
     
          // Chargement de l'image de la MapMonde 
          Image map = getImage(getCodeBase(),"map.gif"); 
          ZoneMap screen = new ZoneMap(map);
     
          JButton erase1 = new JButton("Erase"); 
          JButton erase2 = new JButton("Erase"); 
     
     
     
          // Placement des différentes parties de l'applet 
     
          Container c = getContentPane(); 
          c.setLayout(new BorderLayout(2,2)); 
     
          c.add(erase1, BorderLayout.NORTH); 
          c.add(screen, BorderLayout.CENTER); 
          c.add(erase2, BorderLayout.SOUTH); 
     
       } 
    }

    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
     
    public class ZoneMap extends JPanel {
     
        private Image map;
     
        public ZoneMap(Image map){
            this.map=map;
        }
     
        public void paint(Graphics g) {
     
            super.paint(g);
            g.drawImage(map, 0, 0, this) 
     
            // ici dessine tes points
     
        }
    }

  14. #14
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Merci de ta réponse !

    Je n'ai jamais réellement pigé cette histoire de méthode paint et de contexte graphique ! On peut donc réécrire la méthode paint au sein d'un JPanel que l'on va afficher dans une frame ou applet donc sans la réécrire dans la classe principale ?

    Je vais tester et te tenir au courant

  15. #15
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void paint(Graphics gc) {
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void paintComponent(Graphics gc) {
    Romain Guy
    Android - Mon livre - Mon blog

  16. #16
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par BARBIER
    Je n'ai jamais réellement pigé cette histoire de méthode paint et de contexte graphique ! On peut donc réécrire la méthode paint au sein d'un JPanel que l'on va afficher dans une frame ou applet donc sans la réécrire dans la classe principale ?
    Oui


    Et Gfx a raison, remplace paint par paintComponent, c'est du swing

  17. #17
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    J´ai testé et désolé pour la lenteur de ma réponse !

    Ca marche !

    Ne reste plus qu´un problème : l´image n´est pas centrée dans le cadre de l´applet en comparaison avec les 2 autres composants ! Elle est alignée à gauche. J´ai essayé de mettre pour voir des JLabel de chaque coté (Ouest et Est) mais ca ne change rien !

    En remplacant paint par paintComponent, plus rien ne s´affiche !

  18. #18
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Avec un simple petit calcule tu peux centrer ton image


    un truc du genre....
    A voir si ca marche...j'ai pas testé...

    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
     
    public class ZoneMap extends JPanel { 
     
        private Image map; 
     
        // Largeur et hauteur de ton image
        private int largeurMap = xxx;
        private int hauteurMap = yyy;
     
     
     
        public ZoneMap(Image map){ 
            this.map=map; 
        } 
     
        public void paint(Graphics g) { 
     
            super.paint(g); 
     
     
            Dimension d = getSize();
            int largeurPanel = d.getWidth();
            int hauteurPanel = d.getHeight();
     
     
            int posX = (largeurPanel - largeurMap) / 2;
            int posY = (hauteurPanel - hauteurMap) / 2;
     
     
            if(posX < 0) posX = 0;
            if(posY < 0) posY = 0;
     
            g.drawImage(map, posX, posY, this) 
     
            // ici dessine tes points 
     
        } 
    }
    N'oublie pas de positionnier tes points correctements par rapport à la position de l'image ensuite...


  19. #19
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Merci à toi !

    Avec un peu de manips, ça marche impeccable : je vais enfin pouvoir attaquer les choses plus sérieuses !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/08/2009, 19h57
  2. [FengGUI][Swing] Conseils pour le GUI d'une applet
    Par Malkavien dans le forum Graphisme
    Réponses: 1
    Dernier message: 31/05/2007, 17h37
  3. [Swing][Applet] Changer tout le contenu et rafraichir
    Par Jack_serious dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 07/05/2007, 14h50
  4. [Applet SWING] Initialisation d'un look and feel
    Par hush dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 31/07/2006, 21h40
  5. Image + Info-bulles + Applet + Swing + souris !!!
    Par BARBIER dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 15/02/2006, 10h15

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