begin process at 2010 03 21 16:33:52
  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 version recursive pour des boucles imbriquées [ par code32 ] bonjour, j'ai trouvé un problème pour faire une version récursive pour des boucles imbriquées d'abord est ce qu'il est possible si oui : j'ai un exemp Mini programme Java avec boucles [ par dah21 ] Bonjour, J'aimerais faire un petit programme, mais je ne sais pas comment l'écrire. Il s'agirait d'entrer des nombres. Dès qu'on entre le nombre 0, un jTable avec une colonne jCheckBox [ par roura22 ] Salut, Je suis en train de developper une application java avec NetBeans et la bibliothèque Swing. j'ai besoin d'une jTable qui soit rempli à partir d programme non compris [ par limalima ] j'ai un programme dont je n'arrive pas à comprendre le résultat:class A {private n;public A(int nn){n=nn;}public int getn(){return n;}public void setn Math.random() en java [ par nicegirle ] bnjr , svp je suis entrain de developper une applet ,contenant un cerle qui se deplace dans mon applet tout en changeant  le rayon, le problème c est


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

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 : 0,234 sec (4)

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