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 :

[AWT] Comment obtenir un Graphics ?


Sujet :

Java

  1. #1
    Membre actif Avatar de bj303931
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 75
    Par défaut [AWT] Comment obtenir un Graphics ?
    Bonjour, dans AWT Graphique souvent on rajoute Graphics g. Or dasn le main comment met-on cette argument?

    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Explique-nous ce que tu veux faire au juste. C'est quoi le main ? La méthode de démarrage d'un programme ? Il n'y a aucune raison d'avoir à changer les arguments de la méthode main(String[] args) (surtout que ça ne fonctionnerait plus si on le faisait), et encore moins avec un argument de type Graphics. A quoi doit te servir cet argument de type Graphics ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif Avatar de bj303931
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 75
    Par défaut
    Oui, tu as raison. Il y a 2 fichiers classes: l'itérateur et la classe d'action

    La classe de l'itérateur
    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
     
    import java.util.Deque;
    import java.util.LinkedList;
     
    public class IterateurSymbole {
     
    	private final Deque <Code39.Epaisseur> pile; 
     
    	public IterateurSymbole (Code39.Epaisseur E, Code39.Nature N){
     
    		pile=new LinkedList<>();
    		descendre(E);
     
    	}
     
    	private void descendre(Code39.Epaisseur E){
    		Code39.Epaisseur Ecourant = E;
     
    		while(Code39.Epaisseur.getE() != null){
    			pile.push(Ecourant);
    		}
     
    	}
     
    	public boolean hasNext(){
    		return !pile.isEmpty();
    	}
     
    	public Code39.Epaisseur next(){
    		Code39.Epaisseur next=pile.pop();
    		descendre(E);
    		return next.getE();
    	}
     
    }
    L'autre classe
    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
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Code39 {
     
    	public static void main(String[] args){
    		System.out.println("It's run!");
    		CodeBarre("0110", g);
     
    	}
     
    	enum Epaisseur {LARGE, ETROIT};
    	Epaisseur epaisseur;
    	enum Nature {BARRE, ESPACE};
    	Nature nature;
     
    	public Code39(){this(Epaisseur.ETROIT,Nature.ESPACE);}
    	public Code39(Epaisseur E, Nature N){
    		this.setE(E);
    		this.setN(N);		
    										}
     
    	public void setE(Epaisseur epaisseur){
    		this.epaisseur=epaisseur;
    	}
     
    	public void setN(Nature nature){
    		this.nature=nature;		
    	}
     
    	public Epaisseur getE(){return this.epaisseur;}
    	public Nature getN(){return this.nature;}
     
    //Dessiner le code barre : 0 une barre étroite; 1 un espace large
    	public void CodeBarre(String CB, Graphics g){
    		int i=0;
    		int n=CB.length();
    		Epaisseur E=Epaisseur.ETROIT;
    		Nature N=Nature.ESPACE;
    		for(i=0; i<n; i++){
    			if (CB.charAt(i)==0){
    				E=Epaisseur.ETROIT;
    				N=Nature.BARRE;
    			}
    			else{
    				E=Epaisseur.LARGE;
    				N=Nature.ESPACE;
    			}
    		}
    		draw(E,N,g);
    	}
     
    	public void draw(Epaisseur E, Nature N, Graphics g){
    		int espace=0;
    		if (E==Epaisseur.ETROIT && N==Nature.BARRE){
    			//Dessiner une barre étroite
    			g.drawLine(10+espace,10+espace,100,100);
    		}
    		else if(E==Epaisseur.LARGE && N==Nature.BARRE){
    			//Dessiner une barre large
    			g.drawLine(25+espace,25+espace,100,100);
    		}
    		else if(E==Epaisseur.ETROIT && N==Nature.ESPACE){
    			//Un espace petit
    			espace=espace+10;		
    		}
    		else if(E==Epaisseur.LARGE && N==Nature.BARRE){
    			//Dessiner un grand espace
    			espace=espace+24;
    		}
    	}
     
    	public String toString(){
     
    		StringBuilder builder=new StringBuilder();
    		toString(builder, this);
    		return builder.toString(); }
     
    	private static void toString(StringBuilder builder, Code39 v){
     
    		builder.append('(');
    		builder.append(v);
    		builder.append(' ');
     
    		builder.append(' ');
    		builder.append(')');
    	}
     
     
     
    }
    Sinon transact, je vais suivre ton conseil et faire une classe énum, merci.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Si je comprends bien, tu veux pouvoir dessiner quelque chose à partir d'une classe à toi, qui a une méthode du type draw(Graphics g).

    Déjà, tu ne peux pas créer une instance Graphics (ce n'est pas une classe, mais une abstraction). Cela n'a même aucun sens (si on oublie l'impossibilité technique) : une instance de Graphics représente un contexte graphique, pas l'entité résultante (un dessin, une impression, un composant affiché à l'écran, etc.). Il est tout à fait possible d'implémenter sa propre version de classe concrète, mais c'est un travail immense, et probablement inutile, à moins de vouloir faire son propre système visuel, qui n'existerait pas déjà.

    Il te faut donc en entrée un élément visuel qui va te fournir une instance de Graphics, qui va te permettre de dessiner dans l'élément visuel.

    Par exemple, si on veut dessiner dans une image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    BufferedImage image = new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB); // on créé une image
    Graphics2D g = image.createGraphics(); // on demande le contexte graphique de l'image
    try {
           // maintenant on peut dessiner dans l'image
           g.drawLine(10,10,10,10);
     
           uneInstance.draw(g); // on peut appeler une méthode d'une classe qu'on a fait soi-même qui va faire le dessin
     
    }
    finally {
         g.dispose(); // on libère le contexte graphique
    }
    Si le but est de dessiner dans un composant Swing (ou AWT), on ne peut pas procéder comme çà : le dessin est fait dans l'Event Dispatch Thread, mais surtout, le contexte graphique étant recyclé, il faut intervenir au moment ou Swing (ou AWT) dessine le composant en question, donc dans l'une des méthodes de dessin de composant (les méthode du type paint(), paintComponent(), etc.), donc par redéfinition (on peut procéder autrement, mais c'est très complexe, car il faut connaître très précisément le processus, sinon on aura n'importe quoi à l'affichage (des bouts de dessins là où ne veut pas principalement).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. comment obtenir un polynome de regression
    Par evariste_galois dans le forum Mathématiques
    Réponses: 17
    Dernier message: 19/01/2007, 15h06
  2. Comment obtenir le nom d'un pc sur un réseau?
    Par Depteam1 dans le forum MFC
    Réponses: 2
    Dernier message: 19/02/2004, 10h17
  3. Réponses: 5
    Dernier message: 18/01/2004, 16h25
  4. Comment obtenir l'heure du serveur avec flash ?
    Par Michaël dans le forum Flash
    Réponses: 9
    Dernier message: 23/12/2003, 17h50
  5. Comment obtenir la liste des paramètres d'une SP ?
    Par Le Gritche dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/03/2003, 16h54

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