begin process at 2012 02 13 15:08:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Java

 > 

Archives

 > 

Au secours

 > 

probleme d'affichage JPanel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme d'affichage JPanel

mercredi 23 juillet 2003 à 15:16:39 | probleme d'affichage JPanel

topic1

je debute en programmation java j'essaye de creer dans une Jframe trois JPanel deux affichant un graphique et un troisieme contenant des boutons
mon probleme est que quand j'utilise repaint() dans les deux zones affichages le premier se dessine dans le premier JPanel mais aussi par dessus le graphique du deuxieme JPanel comment resoudre ce probleme?

voila pour l'instant ce que j'ai fait

n'hesitez pas a envoye des remarques

import javax.swing.*;
import java.awt.*;


public class test
{
public static void main(String[] args)
{
fenetre test=new fenetre("cercle");
}
}
//////////////////////////////////////////////////////////////////////class fenetre extends JFrame
{
private pan_cercle cer;
private pan_courbe cou;
private pan_bouton bou;

public fenetre(String s)
{
super(s);

addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

getContentPane().setLayout(null);

cer = new pan_cercle(0,0,0.0005,0.005,cou);
bou = new pan_bouton(cou,cer,this);
cou = new pan_courbe(cer);

getContentPane().add(cer);
getContentPane().add(cou);
getContentPane().add(bou);

setBounds(0,0,820,620);
setVisible(true);
setResizable(false);
}

}
//////////////////////////////////////////////////////////////////////class pan_cercle extends JPanel
{
private int nombre_tour_cercle1;
private int nombre_tour_cercle2;
private double vitesse_cercle1;
private double vitesse_cercle2;
private int bout;
private pan_courbe cou;

public pan_cercle(int nombre_tour_cercle1,int nombre_tour_cercle2,double vitesse_cercle1,double vitesse_cercle2,pan_courbe cou)
{
this.cou=cou;
this.nombre_tour_cercle1=nombre_tour_cercle1;
this.nombre_tour_cercle2=nombre_tour_cercle2;
this.vitesse_cercle1=vitesse_cercle1;
this.vitesse_cercle2=vitesse_cercle2;
setBounds(5,5,395,395);
}

public int get_nombre_tour_cercle1()
{
return nombre_tour_cercle1;
}

public int get_nombre_tour_cercle2()
{
return nombre_tour_cercle2;
}

public double get_vitesse_cercle1()
{
return vitesse_cercle1;
}

public double get_vitesse_cercle2()
{
return vitesse_cercle2;
}

public int get_bout()
{
return bout;
}

public void paintComponent(Graphics g)
{
Graphics2D g2=(Graphics2D)g;
super.paintComponent(g2);

int x=(int)(Math.cos(nombre_tour_cercle1*2*Math.PI*vitesse_cercle1)*100)+200;
int y=(int)(Math.sin(nombre_tour_cercle1*2*Math.PI*vitesse_cercle1)*100)+200;
int x2=(int)(Math.cos(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*75)+x;
int y2=(int)(Math.sin(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*75)+y;
//int x2=(int)((Math.cos(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*(100+(x-200)*1.4)))+200;
//int y2=(int)((Math.sin(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*(100+(y-200)*1.4)))+200;

bout=y2;

g2.drawOval(100,100,200,200);
g2.drawLine(200,200,x,y);
g2.drawOval(x-75,y-75,150,150);
g2.drawLine(x,y,x2,y2);

nombre_tour_cercle1++;
nombre_tour_cercle2++;
repaint();
}

}
//////////////////////////////////////////////////////////////////////class pan_courbe extends JPanel
{
private pan_cercle cer;
private double temp=3;

public pan_courbe(pan_cercle cer)
{
this.cer=cer;
setBounds(405,5,395,395);
}

public void paintComponent(Graphics g)
{
Graphics2D g2=(Graphics2D)g;

if((int)(temp)%400<5)
{
super.paintComponent(g2);
g2.drawLine(1,198,398,198);
}

if(cer.get_bout()!=0)
{
g2.fillOval((int)(temp)%400-2,cer.get_bout()-2,4,4);
temp+=0.1;
}
repaint();
}

}

//////////////////////////////////////////////////////////////////////
class pan_bouton extends JPanel
{
private pan_cercle cer;
private pan_courbe cou;
private JFrame window;

pan_bouton(pan_courbe cou,pan_cercle cer,JFrame window)
{
this.window=window;
this.cer=cer;
this.cou=cou;
setBounds(5,405,790,195);

JButton demarre=new JButton("START");
add(demarre);
}

}
mercredi 23 juillet 2003 à 15:58:09 | Re : probleme d'affichage JPanel

benohite

bonjour,
le probleme vient de la methode repaint() que tu appelles dans chacune des methode paintComponent de tes deux panel
en effet si tu n y fais reference (a repaint() bien sur) que dans ton panel cercle alors ton graphique se dessine correctement et ta courbe reste plate ce qui est logique
en revanche si tu fais l inverse (appel de repaint uniquement dans le panel courbe) alors ton graphique ne bouge plus et ta courbe se dessine tout en restant constante car ton grahique est figé
et bien sur comme tu l as dis un appel de repaint dans les deux panel engendre deux graphiques et un point au lieu d une courbe
tu as plusieurs solutions:

soit tu cree une classe donne qui se chargera de recupere les donne du graphique pour qu elle soient exploitable par la courbe et dans ce cas il te faut faire un processus sur cet objet afin d organiser l echange:
l objet graphique ecrit les donnes et valide pour que l objet courbe puisse les lire

ou alors tu utilise un timer qui enverra un notifcation toute les econde par ex ce qui te permettra de recupere dans les deux objets la meme valeur avant traitement

voila j espere que j ai ete clair
bon courage

benohite




-------------------------------
Réponse au message :
-------------------------------

> je debute en programmation java j'essaye de creer dans une Jframe trois JPanel deux affichant un graphique et un troisieme contenant des boutons
> mon probleme est que quand j'utilise repaint() dans les deux zones affichages le premier se dessine dans le premier JPanel mais aussi par dessus le graphique du deuxieme JPanel comment resoudre ce probleme?
>
> voila pour l'instant ce que j'ai fait
>
> n'hesitez pas a envoye des remarques
>
> import javax.swing.*;
> import java.awt.*;
>
>
> public class test
> {
> public static void main(String[] args)
> {
> fenetre test=new fenetre("cercle");
> }
> }
> //////////////////////////////////////////////////////////////////////class fenetre extends JFrame
> {
> private pan_cercle cer;
> private pan_courbe cou;
> private pan_bouton bou;
>
> public fenetre(String s)
> {
> super(s);
>
> addWindowListener(new WindowAdapter()
> {
> public void windowClosing(WindowEvent e)
> {
> System.exit(0);
> }
> });
>
> getContentPane().setLayout(null);
>
> cer = new pan_cercle(0,0,0.0005,0.005,cou);
> bou = new pan_bouton(cou,cer,this);
> cou = new pan_courbe(cer);
>
> getContentPane().add(cer);
> getContentPane().add(cou);
> getContentPane().add(bou);
>
> setBounds(0,0,820,620);
> setVisible(true);
> setResizable(false);
> }
>
> }
> //////////////////////////////////////////////////////////////////////class pan_cercle extends JPanel
> {
> private int nombre_tour_cercle1;
> private int nombre_tour_cercle2;
> private double vitesse_cercle1;
> private double vitesse_cercle2;
> private int bout;
> private pan_courbe cou;
>
> public pan_cercle(int nombre_tour_cercle1,int nombre_tour_cercle2,double vitesse_cercle1,double vitesse_cercle2,pan_courbe cou)
> {
> this.cou=cou;
> this.nombre_tour_cercle1=nombre_tour_cercle1;
> this.nombre_tour_cercle2=nombre_tour_cercle2;
> this.vitesse_cercle1=vitesse_cercle1;
> this.vitesse_cercle2=vitesse_cercle2;
> setBounds(5,5,395,395);
> }
>
> public int get_nombre_tour_cercle1()
> {
> return nombre_tour_cercle1;
> }
>
> public int get_nombre_tour_cercle2()
> {
> return nombre_tour_cercle2;
> }
>
> public double get_vitesse_cercle1()
> {
> return vitesse_cercle1;
> }
>
> public double get_vitesse_cercle2()
> {
> return vitesse_cercle2;
> }
>
> public int get_bout()
> {
> return bout;
> }
>
> public void paintComponent(Graphics g)
> {
> Graphics2D g2=(Graphics2D)g;
> super.paintComponent(g2);
>
> int x=(int)(Math.cos(nombre_tour_cercle1*2*Math.PI*vitesse_cercle1)*100)+200;
> int y=(int)(Math.sin(nombre_tour_cercle1*2*Math.PI*vitesse_cercle1)*100)+200;
> int x2=(int)(Math.cos(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*75)+x;
> int y2=(int)(Math.sin(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*75)+y;
> //int x2=(int)((Math.cos(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*(100+(x-200)*1.4)))+200;
> //int y2=(int)((Math.sin(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*(100+(y-200)*1.4)))+200;
>
> bout=y2;
>
> g2.drawOval(100,100,200,200);
> g2.drawLine(200,200,x,y);
> g2.drawOval(x-75,y-75,150,150);
> g2.drawLine(x,y,x2,y2);
>
> nombre_tour_cercle1++;
> nombre_tour_cercle2++;
> repaint();
> }
>
> }
> //////////////////////////////////////////////////////////////////////class pan_courbe extends JPanel
> {
> private pan_cercle cer;
> private double temp=3;
>
> public pan_courbe(pan_cercle cer)
> {
> this.cer=cer;
> setBounds(405,5,395,395);
> }
>
> public void paintComponent(Graphics g)
> {
> Graphics2D g2=(Graphics2D)g;
>
> if((int)(temp)%400<5)
> {
> super.paintComponent(g2);
> g2.drawLine(1,198,398,198);
> }
>
> if(cer.get_bout()!=0)
> {
> g2.fillOval((int)(temp)%400-2,cer.get_bout()-2,4,4);
> temp+=0.1;
> }
> repaint();
> }
>
> }
>
> //////////////////////////////////////////////////////////////////////
> class pan_bouton extends JPanel
> {
> private pan_cercle cer;
> private pan_courbe cou;
> private JFrame window;
>
> pan_bouton(pan_courbe cou,pan_cercle cer,JFrame window)
> {
> this.window=window;
> this.cer=cer;
> this.cou=cou;
> setBounds(5,405,790,195);
>
> JButton demarre=new JButton("START");
> add(demarre);
> }
>
> }
>
jeudi 24 juillet 2003 à 17:22:44 | Re : probleme d'affichage JPanel

topic1

lorsqu j'appelle la methode repaint sur les deux, le cercle se dessine sur la courbe qui se trace en dessous

pourrais tu developper un peu plus des deux solutions
merci


-------------------------------
Réponse au message :
-------------------------------

> bonjour,
> le probleme vient de la methode repaint() que tu appelles dans chacune des methode paintComponent de tes deux panel
> en effet si tu n y fais reference (a repaint() bien sur) que dans ton panel cercle alors ton graphique se dessine correctement et ta courbe reste plate ce qui est logique
> en revanche si tu fais l inverse (appel de repaint uniquement dans le panel courbe) alors ton graphique ne bouge plus et ta courbe se dessine tout en restant constante car ton grahique est figé
> et bien sur comme tu l as dis un appel de repaint dans les deux panel engendre deux graphiques et un point au lieu d une courbe
> tu as plusieurs solutions:
>
> soit tu cree une classe donne qui se chargera de recupere les donne du graphique pour qu elle soient exploitable par la courbe et dans ce cas il te faut faire un processus sur cet objet afin d organiser l echange:
> l objet graphique ecrit les donnes et valide pour que l objet courbe puisse les lire
>
> ou alors tu utilise un timer qui enverra un notifcation toute les econde par ex ce qui te permettra de recupere dans les deux objets la meme valeur avant traitement
>
> voila j espere que j ai ete clair
> bon courage
>
> benohite
>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > je debute en programmation java j'essaye de creer dans une Jframe trois JPanel deux affichant un graphique et un troisieme contenant des boutons
> > mon probleme est que quand j'utilise repaint() dans les deux zones affichages le premier se dessine dans le premier JPanel mais aussi par dessus le graphique du deuxieme JPanel comment resoudre ce probleme?
> >
> > voila pour l'instant ce que j'ai fait
> >
> > n'hesitez pas a envoye des remarques
> >
> > import javax.swing.*;
> > import java.awt.*;
> >
> >
> > public class test
> > {
> > public static void main(String[] args)
> > {
> > fenetre test=new fenetre("cercle");
> > }
> > }
> > //////////////////////////////////////////////////////////////////////class fenetre extends JFrame
> > {
> > private pan_cercle cer;
> > private pan_courbe cou;
> > private pan_bouton bou;
> >
> > public fenetre(String s)
> > {
> > super(s);
> >
> > addWindowListener(new WindowAdapter()
> > {
> > public void windowClosing(WindowEvent e)
> > {
> > System.exit(0);
> > }
> > });
> >
> > getContentPane().setLayout(null);
> >
> > cer = new pan_cercle(0,0,0.0005,0.005,cou);
> > bou = new pan_bouton(cou,cer,this);
> > cou = new pan_courbe(cer);
> >
> > getContentPane().add(cer);
> > getContentPane().add(cou);
> > getContentPane().add(bou);
> >
> > setBounds(0,0,820,620);
> > setVisible(true);
> > setResizable(false);
> > }
> >
> > }
> > //////////////////////////////////////////////////////////////////////class pan_cercle extends JPanel
> > {
> > private int nombre_tour_cercle1;
> > private int nombre_tour_cercle2;
> > private double vitesse_cercle1;
> > private double vitesse_cercle2;
> > private int bout;
> > private pan_courbe cou;
> >
> > public pan_cercle(int nombre_tour_cercle1,int nombre_tour_cercle2,double vitesse_cercle1,double vitesse_cercle2,pan_courbe cou)
> > {
> > this.cou=cou;
> > this.nombre_tour_cercle1=nombre_tour_cercle1;
> > this.nombre_tour_cercle2=nombre_tour_cercle2;
> > this.vitesse_cercle1=vitesse_cercle1;
> > this.vitesse_cercle2=vitesse_cercle2;
> > setBounds(5,5,395,395);
> > }
> >
> > public int get_nombre_tour_cercle1()
> > {
> > return nombre_tour_cercle1;
> > }
> >
> > public int get_nombre_tour_cercle2()
> > {
> > return nombre_tour_cercle2;
> > }
> >
> > public double get_vitesse_cercle1()
> > {
> > return vitesse_cercle1;
> > }
> >
> > public double get_vitesse_cercle2()
> > {
> > return vitesse_cercle2;
> > }
> >
> > public int get_bout()
> > {
> > return bout;
> > }
> >
> > public void paintComponent(Graphics g)
> > {
> > Graphics2D g2=(Graphics2D)g;
> > super.paintComponent(g2);
> >
> > int x=(int)(Math.cos(nombre_tour_cercle1*2*Math.PI*vitesse_cercle1)*100)+200;
> > int y=(int)(Math.sin(nombre_tour_cercle1*2*Math.PI*vitesse_cercle1)*100)+200;
> > int x2=(int)(Math.cos(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*75)+x;
> > int y2=(int)(Math.sin(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*75)+y;
> > //int x2=(int)((Math.cos(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*(100+(x-200)*1.4)))+200;
> > //int y2=(int)((Math.sin(nombre_tour_cercle2*2*Math.PI*vitesse_cercle2)*(100+(y-200)*1.4)))+200;
> >
> > bout=y2;
> >
> > g2.drawOval(100,100,200,200);
> > g2.drawLine(200,200,x,y);
> > g2.drawOval(x-75,y-75,150,150);
> > g2.drawLine(x,y,x2,y2);
> >
> > nombre_tour_cercle1++;
> > nombre_tour_cercle2++;
> > repaint();
> > }
> >
> > }
> > //////////////////////////////////////////////////////////////////////class pan_courbe extends JPanel
> > {
> > private pan_cercle cer;
> > private double temp=3;
> >
> > public pan_courbe(pan_cercle cer)
> > {
> > this.cer=cer;
> > setBounds(405,5,395,395);
> > }
> >
> > public void paintComponent(Graphics g)
> > {
> > Graphics2D g2=(Graphics2D)g;
> >
> > if((int)(temp)%400<5)
> > {
> > super.paintComponent(g2);
> > g2.drawLine(1,198,398,198);
> > }
> >
> > if(cer.get_bout()!=0)
> > {
> > g2.fillOval((int)(temp)%400-2,cer.get_bout()-2,4,4);
> > temp+=0.1;
> > }
> > repaint();
> > }
> >
> > }
> >
> > //////////////////////////////////////////////////////////////////////
> > class pan_bouton extends JPanel
> > {
> > private pan_cercle cer;
> > private pan_courbe cou;
> > private JFrame window;
> >
> > pan_bouton(pan_courbe cou,pan_cercle cer,JFrame window)
> > {
> > this.window=window;
> > this.cer=cer;
> > this.cou=cou;
> > setBounds(5,405,790,195);
> >
> > JButton demarre=new JButton("START");
> > add(demarre);
> > }
> >
> > }
> >
>


Cette discussion est classée dans : nombre, int, tour, vitesse, cercle2


Répondre à ce message

Sujets en rapport avec ce message

Comment déterminer nombre de chiffres dans un int [ par Bouki ] la question est dans le sujetpar exemple si a == 10 ca renvoie 2 et si b == 9 ca renvoie 1 Additionner deux nombres d'un fichier txt [ par daviddubois ] Bonjour tout le monde,Je suis un peu déçu car je pensais avoir acquis tous les principes des File (FileReader, BufferedReader...) mais je m'aperçois q Comment utiliser try ? [ par Julien39 ] Bonjour a tous, je sais qu'il existe en JAVA une fonction try qui gere les erreurs mais je ne sais pas si l'utilisation que je veux en faire convient. Afficher un tableau d'entiers dans un Applet [ par mosozi ] Bonjour, Je suis débutante en programmation java. Au début j'avais coe travail de créer une application java permettant: 1º) Saisir une liste d'entier Changer INT en Double [ par spmsbl ] Bonjour Je dois écrire une petit programme qui va calculer des fractions. J'ai une variable INT mais le résultat doit être de type double car je ne v JAVA==>C [ par cur2009 ] Bonjour, j'ai un petit programme développé sur Java et j'ai besoin de votre aide pour le convertir en C, je ne sais pas si ça est possible ou non ! m vérifier qu'une valeur est positive [ par magicraky ] voici mon code sql pour créer une table et vérifier que la valeur est positive avant l'insertion et pourtant j'ai dejà pu voir une valeur négative dan Problème avec un logiciel pour comparer un entree clavier à une grille... [ par badaboum222 ] Bonjour, je débute en java et j'ai besoin d'aide au sujet d'un programme que je dois remettre bientôt. Depuis plusieurs jours je travail pour trouver algorithme de fonction sudoku [ par scoobidooo1 ] Bonjour, J'aimerais faire valider mes algorithmes des deux fonctions suivantes 1- /* Fonction Boolean qui valide une grille remplie ou non*/ public b interface graphique java [ par tamalgo ] Salut tout le monde, voici mon code: [code=java]package LesClasses; import java.io.IOException; import java.util.ArrayList; import java.util.Vector;


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,607 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales