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

Agents de placement/Fenêtres Java Discussion :

Relation pour des formes et transfert de données entre JFrame


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Homme Profil pro
    DUT INFORMATIQUE EN ALTERNANCE
    Inscrit en
    Septembre 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DUT INFORMATIQUE EN ALTERNANCE

    Informations forums :
    Inscription : Septembre 2015
    Messages : 34
    Par défaut Relation pour des formes et transfert de données entre JFrame
    Bonjour,

    Mon premier problème est au niveau d'un transfert de donnée entre 3 fenêtres, de la 1 à la 2 ca fonctionne mais de la 1 à la 3 non. Alors que j'ai fais le même principe...

    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
    public void actionPerformed(ActionEvent e) 
    			{
    				haut = Double.parseDouble(textFieldLong.getText());
    				larg = Double.parseDouble(textFieldLarg.getText());
    				diam = Double.parseDouble(textFieldDiam.getText());
    				pas = Double.parseDouble(textFieldPas.getText());
    				vide = ((Math.pow(diam, 2)*90.69)/Math.pow(pas, 2));
    				if (pas<diam)
    				{
    					 JOptionPane.showMessageDialog(frame,
    						        "Le pas doit être supérieur ou égal au diamètre." + retour+ "Votre pas = " + pas + retour + "Votre diamètre = " +diam,
    						        "Attention à vos valeurs",
    						        JOptionPane.ERROR_MESSAGE);
    				}
    				else
    				{
    					System.out.println("Principal :  ");
    					System.out.println(" ");
    					System.out.println("largeur = " + larg);
    					System.out.println("hauteur = " + haut);
    					System.out.println("Diamètre = " + diam);
    					System.out.println("Pas = " + pas);
    					System.out.println("Vide = " + vide);
    					Forme forme = new Forme();
    					forme.setBackground(Color.WHITE);
    					forme.larg = larg;
    					forme.haut = haut;
    					forme.diam = diam;
    					forme.pas = pas;
    					forme.vide = vide;
    					forme.setPreferredSize(new Dimension(450,250));
    					Generer.main(forme,"Tôle");
    					Resultat r = new Resultat();
    					r.larg = larg;
    					r.haut = haut;
    					r.diam = diam;
    					r.pas = pas;
    					r.vide = vide;
    					r.setVisible(true);
     
    				}
    Résultat:

    Principal :

    largeur = 3.0
    hauteur = 3.0
    Diamètre = 3.0
    Pas = 3.0
    Vide = 90.69

    Resultat :

    largeur = 0.0
    hauteur = 0.0
    Diamètre = 0.0
    Pas = 0.0
    vide = 0.0

    Forme :

    largeur = 3.0
    hauteur = 3.0
    Diamètre = 3.0
    Pas = 3.0
    vide = 90.69

    Et le second est niveau de la relation pour générer des formes, j'y suis presque comme dans l'exemple:
    https://www.dropbox.com/s/ss0myjrpl4...10%29.pdf?dl=0
    Vous avez le site la : http://www.actisfurio.com/fr/C/5/Calcule-VSP

    Voici a quoi j'arrive, mais dès que j'augmente bah ca n'y ressemble plus...
    Nom : Capture d’écran 2016-06-02 à 11.50.49.png
Affichages : 194
Taille : 21,1 Ko

    Cdt

  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,

    Comme tu as plusieurs motifs visiblement, plutôt que t'embêter à couvrir la surface par une double-boucle, tu peux aussi utiliser les textures.

    Par exemple :

    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
    95
    96
    97
    98
    99
    100
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Paint;
    import java.awt.RenderingHints;
    import java.awt.TexturePaint;
    import java.awt.geom.Ellipse2D;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class TexturePanel extends JPanel {
     
    	private Paint paint;
    	public TexturePanel() {
    	}
    	public TexturePanel(Paint paint) {
    		this.paint=paint;
    	}
     
    	public void setPaint(Paint paint) {
    		this.paint=paint;
    		repaint();
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		if ( paint!=null ) {
    			((Graphics2D)g).setPaint(paint);
    			g.fillRect(0, 0, getWidth(), getHeight());
    		}
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		double offsetx=-15;
    		double offsety=10;
    		double diam=20;
    		double pas=40; 
    		double angle=Math.toRadians(60);
    		Color color = Color.BLACK;
    		Color bgcolor = Color.LIGHT_GRAY;
     
    		BufferedImage tole = createTile(diam, pas, angle, color);
     
    		TexturePanel panel = new TexturePanel(new TexturePaint(tole, new Rectangle2D.Double(offsetx, offsety, tole.getWidth(), tole.getHeight())));
    		panel.setBackground(bgcolor);
     
    		frame.add(panel);
    		frame.setSize(300, 300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	public static BufferedImage createTile(double diam, double step, double angle, Color color) {
     
    		double cx=diam/2; // x du centre du cercle de la première ligne
    		double cy=diam/2; // y du centre du cercle de la première ligne
     
    		double space = step-diam; // espace entre cercles (entre centres)
     
    		double cx2=cx + (diam + space) * Math.cos(angle); // x du centre du cercle de la seconde ligne
    		double cy2=cy + (diam + space) * Math.sin(angle); // y du centre du cercle de la seconde ligne
     
    		double cx3=cx2 + (diam + space) * Math.cos(angle); // x du second cercle, pour calculer l’espace inter cercle
     
    		double spacev = cy2-cy-diam; // espace vertical entre cercles
    		double spaceh = cx3-cx2-diam; // espace horizontal entre cercles
     
    		Rectangle2D bounds1 = new Rectangle2D.Double(0, 0, diam, diam); // les bounds du cercle de la première ligne
    		Rectangle2D bounds2 = new Rectangle2D.Double(cx2-diam/2, cy2-diam/2, diam+spaceh, diam+spacev); // les bounds du cercle de la seconde ligne
     
    		Rectangle2D imageBounds = bounds1.getBounds2D().createUnion(bounds2.getBounds2D()); // on calcule la taille de la texture par union (on veut pouvoir habiller n'importe quel espace avec des textures répétitives)
     
    		BufferedImage image = new BufferedImage((int)imageBounds.getWidth(), (int)imageBounds.getHeight(), BufferedImage.TYPE_INT_ARGB); // je fais une texture transparent : la couleur de fond sera gérée dans le panel
     
    		Graphics2D g = image.createGraphics();
    		try {
    			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // améliore la qualité du dessin
    			g.setColor(color); // sélection couleur
    			for(double x=-step; x<imageBounds.getWidth(); x+=step) { // on couvre tout l'espace répétable en horizontal
    				g.fill(new Ellipse2D.Double(x, 0, diam, diam)); // dessin du cercle de la première ligne
    				g.fill(new Ellipse2D.Double(x+cx2-diam/2, cy2-diam/2, diam, diam)); // dessin du cercle de la seconde
    			}
    		}
    		finally {
    			g.dispose();
    		}
    		return image;
     
     
    	}
     
    }
    Tu fais une méthode de génération de texture par type de texture (attention, cette texture ne fonctionne pas avec le cas 45° du catalogue que tu montres, parce que ce n'est pas le même algo), et tu régénères ta texture à chaque saisie de nouveaux paramètres. On peut gérer en plus facilement l'offset (mais on aurait aussi pu le gérer facilement avec une méthode de dessin Java2D classique, en utilisant une translation.

    Résultat (avec les paramètres de l'exemple ci-dessus) :
    Nom : texture.PNG
Affichages : 194
Taille : 5,7 Ko
    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 averti
    Homme Profil pro
    DUT INFORMATIQUE EN ALTERNANCE
    Inscrit en
    Septembre 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DUT INFORMATIQUE EN ALTERNANCE

    Informations forums :
    Inscription : Septembre 2015
    Messages : 34
    Par défaut
    J'essaye de comprendre ton code la, merci de l'aide, je reviens vers toi des que possible

  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
    Citation Envoyé par Evan59245 Voir le message
    J'essaye de comprendre ton code la, merci de l'aide, je reviens vers toi des que possible
    J'ai édité mon code pour ajouter des commentaires d'explication : peut-être ne les as-tu pas vus ?
    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.

  5. #5
    Membre averti
    Homme Profil pro
    DUT INFORMATIQUE EN ALTERNANCE
    Inscrit en
    Septembre 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DUT INFORMATIQUE EN ALTERNANCE

    Informations forums :
    Inscription : Septembre 2015
    Messages : 34
    Par défaut
    Oui oui je viens de le voir je le lis

  6. #6
    Membre averti
    Homme Profil pro
    DUT INFORMATIQUE EN ALTERNANCE
    Inscrit en
    Septembre 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DUT INFORMATIQUE EN ALTERNANCE

    Informations forums :
    Inscription : Septembre 2015
    Messages : 34
    Par défaut
    Malgré les différents commentaires j'ai vraiment du mal à comprendre. Et également, pourquoi l'algo ne pourrait pas fonctionner pour le 90 ?

  7. #7
    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
    Bah, il faut me dire ce que tu comprends pas (quelque chose dans le code Java ? les maths/géométrie ?...).

    Ce n'est pas tant que le 45° (le 90° c'est encore un autre problème) ne peut pas fonctionner, c'est que les calculs que je fais ne peuvent fonctionner que pour une répartition équidistante. C'était juste pour te montrer le principe.. Il faudrait modifier l'algo pour le généraliser pour qu'il fonctionne pour n'importe quel angle (c'est un problème de maths/géométrie et non un problème de Java), mais tu peux aussi y arriver probablement par ajustement (le principe reste globalement le même : déterminer la taille minimal de la tuile pour gérer un remplissage par répétition de la tuile). Pour le 90, autant faire un algo à part, ce sera plus simple.
    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.

  8. #8
    Membre averti
    Homme Profil pro
    DUT INFORMATIQUE EN ALTERNANCE
    Inscrit en
    Septembre 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DUT INFORMATIQUE EN ALTERNANCE

    Informations forums :
    Inscription : Septembre 2015
    Messages : 34
    Par défaut
    J'ai du mal à comprendre le code et aussi les maths, vraiment.

    Cette partie la:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    double cx=diam/2; // x du centre du cercle de la première ligne
    		double cy=diam/2; // y du centre du cercle de la première ligne
     
    		double space = step-diam; // espace entre cercles (entre centres)
     
    		double cx2=cx + (diam + space) * Math.cos(angle); // x du centre du cercle de la seconde ligne
    		double cy2=cy + (diam + space) * Math.sin(angle); // y du centre du cercle de la seconde ligne
     
    		double cx3=cx2 + (diam + space) * Math.cos(angle); // x du second cercle, pour calculer l’espace inter cercle
     
    		double spacev = cy2-cy-diam; // espace vertical entre cercles
    		double spaceh = cx3-cx2-diam; // espace horizontal entre cercles

    Et la je vois que des que je met des valeurs comme 3 et 3 ca fait n'importe quoi alors est ce que je dois modifier également autre chose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double offsetx=-15;
    		double offsety=10;
    		double diam=20;
    		double pas=40;

Discussions similaires

  1. cvSnakeImage pour des formes simples
    Par saturn1 dans le forum OpenCV
    Réponses: 0
    Dernier message: 11/07/2012, 17h20
  2. Réponses: 14
    Dernier message: 06/04/2012, 16h18
  3. Function de controle pour des forms MDI
    Par soror dans le forum Delphi
    Réponses: 4
    Dernier message: 27/06/2007, 00h26
  4. Réponses: 5
    Dernier message: 30/11/2005, 16h41
  5. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15

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