Liste Chainée en java | Gérer le resize [Resolu]

Liste Chainée en java | Gérer le resize [Resolu] - Java - Programmation

Marsh Posté le 13-11-2002 à 13:39:04    

voila j'ai 2 questions :  
 
est ce que les listes chainées existe en java?
Si oui comment les utiliser.
 
Comment gerer le resize d'une fenetre graphique?
 
Merci


Message édité par thunderbird54 le 26-11-2002 à 20:39:48
Reply

Marsh Posté le 13-11-2002 à 13:39:04   

Reply

Marsh Posté le 13-11-2002 à 14:15:18    

Si les listes chaînée existent en Java, ça veut pas dire grand chose.
Oui, on peut en programmer (encore heureux)
et un liste doublement chainée est incluse dans les JDK pas trop vieux (LinkedList)
 
Gérer le resize d'une fenêtre... c censé être généré tout seul grâce aux layout, non ?

Reply

Marsh Posté le 13-11-2002 à 14:27:30    

et puis bon à moins d'avoir un besoin très particulier, un bon ArrayList répond à 95% des besoins !

Reply

Marsh Posté le 13-11-2002 à 14:40:00    

Logiquement, pour les tri et l'insertion d'éléments à divers endroits de la liste, un LinkedList doit être + performante. non ?

Reply

Marsh Posté le 13-11-2002 à 15:52:46    

bien sur, bien sur ... mais c'est un besoin assez rare ...
et puis dans ce cas, il y a le TreeSet qui est plus performant.


Message édité par benou le 13-11-2002 à 15:57:53
Reply

Marsh Posté le 13-11-2002 à 15:56:55    

[:cupra]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-11-2002 à 20:53:12    

Alors en fait, je cherche un évenement qui me dise quand l'utilisateur redimensionne la fenetre.  
 
(pour apres redessiner tout ce qui a été dessiné par l'utilisateur, les figures etant mémorisées grace aux listes chainées)

Reply

Marsh Posté le 13-11-2002 à 21:10:42    

petit coup de javadoc ...
 

  • java.awt.Component.addComponentListener(ComponentListener l)
  • java.awt.event.ComponentListener.componentResized(ComponentEvent e)

Reply

Marsh Posté le 13-11-2002 à 22:48:10    

bah ça sert quand même assez régulièrement les listes chaînées! Dès que t'as un truc à longueur non défini que tu veux rendre dynamique et optimisé les listes chaînées c du bonheur!

Reply

Marsh Posté le 13-11-2002 à 23:32:19    

g un pb avec le resize!!!
 
voici le code
 
     public class gestion_resize extends ComponentAdapter
       
       
      {
          public void componentHidden(ComponentEvent e) {}
          public void componentMoved(ComponentEvent e) {}  
          public void componentResized(ComponentEvent e)
         {
            R1=new Repere(-10,10,-5,5,P_Centre);
         }
          public void componentShown(ComponentEvent e) {}
       
       
      }  
 
la ligne qui va bien :
 
          P_Centre.addComponentListener(new gestion_resize());
 
 
 
donc quand l'utilisateur redimensionne la fenetre, je demande au programme de retracer un repere graphique selon les dimensions de la fenetre (tout ca a l'interieur de repere)
 
et ca marche...
 
 
 
... pendant quelques secondes!
 
je vois le repere s'afficher et apres tout s'efface, on dirait que la machine efface le panel apres l'evenement!
 
Que faire?

Reply

Marsh Posté le 13-11-2002 à 23:32:19   

Reply

Marsh Posté le 13-11-2002 à 23:33:37    

edit : je réponds à Ant-103  
 
en C oui ! ;)
 
plus sérieusement, ca dépend complétement de l'utilisation que tu en fait. Si tu veux accéder à n'importe quel élément rapidement, c'est certainement pas la meilleur structure.
 
Une ArrayList répond très bien au besoin que tu as exprimé


Message édité par benou le 13-11-2002 à 23:34:03
Reply

Marsh Posté le 13-11-2002 à 23:38:41    

ok je v voir ca et pour mon pb sur le resize?

Reply

Marsh Posté le 13-11-2002 à 23:42:18    

thunderbird54 a écrit a écrit :

ok je v voir ca et pour mon pb sur le resize?




je sais pas ... je maîtrise pas bien les inetraces graphiques en Java, j'ai que de très vagues connaissances ...

Reply

Marsh Posté le 14-11-2002 à 12:01:04    

Il nous faudrait plus de détails sur ton code.

Reply

Marsh Posté le 14-11-2002 à 13:08:52    

ok je posterais ca se dans l'aprem ou ce soir!
 
une petite idée d'ou ca pourrais venir?

Reply

Marsh Posté le 14-11-2002 à 13:13:24    

Nope. A part que tu fais un clear suite à la réception d'un autre événement, je ne vois pas...

Reply

Marsh Posté le 14-11-2002 à 20:59:40    

non pas de clear voic le code...
 
il s'articule autour de 3 classes, la pincipale, le fond (bouton,menu, gestionnaire de clik) et repere (tracage)
 
classe Fentre :
 

Code :
  1. import javax.swing.*;
  2.    import java.awt.*;
  3.     public class Fenetre extends JFrame   {
  4.  
  5.       static Fond pan;
  6.        public static void main(String args[])
  7.       {
  8.          Fenetre Fen= new Fenetre();
  9.          pan.initialise();
  10.       }
  11.  
  12.        public Fenetre()
  13.       {
  14.          setDefaultCloseOperation(EXIT_ON_CLOSE);
  15.          setTitle("Projet JAVA" );
  16.          setSize(1000,500);
  17.          Container contentPane = getContentPane();
  18.      
  19.          pan = new Fond();
  20.      
  21.          contentPane.add(pan);
  22.          setVisible(true);
  23.      
  24.       }
  25.  
  26.  
  27.  
  28.  
  29.    }


 
 
Classe Fond : (Attention c long)
 
 

Code :
  1. import javax.swing.*;
  2.    import java.awt.*;
  3.    import java.awt.event.*;
  4.     public class Fond extends JPanel implements ActionListener
  5.    {
  6.  
  7.       private JButton btnQuitter,B1,B2,B3,B4,B5,B6,Repere;
  8.       private JLabel Param1,Param2,Param3,Param4;
  9.       private JTextField xmin,xmax,ymin,ymax,Coord_X,Coord_Y,Coord_XF1,Coord_YF1,Coord_XF2,Coord_YF2,longueur;
  10.       private Repere R1;
  11.       private JPanel P_Centre;
  12.       private int Action;
  13.       private int nbr=0,xl,yl,xl1,yl1;
  14.  
  15.  
  16.  
  17.  
  18.  
  19.        public Fond()
  20.       {
  21.          setLayout(new BorderLayout());
  22.      
  23.          Haut();
  24.          Gauche();
  25.          Bas();
  26.      
  27.      
  28.          P_Centre=new JPanel();
  29.          P_Centre.addMouseListener(new MouseClickHandler());
  30.          P_Centre.addMouseMotionListener(new Mouse_Dep());
  31.          P_Centre.addComponentListener(new gestion_resize());
  32.      
  33.          add(P_Centre,BorderLayout.CENTER);
  34.       }
  35.  
  36.        public void initialise()
  37.       {
  38.          R1=new Repere(Double.parseDouble(xmin.getText()),Double.parseDouble(xmax.getText()),Double.parseDouble(ymin.getText()),Double.parseDouble(ymax.getText()),P_Centre);
  39.       }
  40.  
  41.  
  42.        public void Haut()
  43.       {
  44.      
  45.          JMenuBar PMenu = new JMenuBar();
  46.      
  47.          JMenu M1 = new JMenu("Fichier" );
  48.          JMenuItem M1_I1= new JMenuItem("Enregistrer" );
  49.          M1_I1.addActionListener(this);
  50.          JMenuItem M1_I2 = new JMenuItem("Quitter" );
  51.          M1_I2.addActionListener(this);
  52.      
  53.          JMenu M2 = new JMenu("Dessiner" );
  54.          JMenu M4 = new JMenu("Aide" );
  55.      
  56.          JMenuItem M2_I1= new JMenuItem("Point" );
  57.          JMenuItem M2_I2= new JMenuItem("Ligne" );
  58.          JMenuItem M2_I3= new JMenuItem("Carre" );
  59.          JMenuItem M2_I4= new JMenuItem("Rectangle" );
  60.          JMenuItem M2_I5= new JMenuItem("Cercle" );
  61.          JMenuItem M2_I6= new JMenuItem("Elipse" );
  62.      
  63.          M1.add(M1_I1);
  64.          M1.add(M1_I2);
  65.      
  66.          M2.add(M2_I1);
  67.          M2.add(M2_I2);
  68.          M2.add(M2_I3);
  69.          M2.add(M2_I4);
  70.          M2.add(M2_I5);
  71.          M2.add(M2_I6);
  72.      
  73.          PMenu.add(M1);
  74.          PMenu.add(M2);
  75.          PMenu.add(M4);
  76.      
  77.          add(PMenu,BorderLayout.NORTH);
  78.       }
  79.  
  80.  
  81.        public void Gauche()
  82.       {
  83.      
  84.          JPanel P = new JPanel();
  85.          P.setLayout(new GridLayout(21,1));
  86.      
  87.          B1 = new JButton ("Point" );
  88.          B1.addActionListener(this);
  89.          P.add(B1);
  90.      
  91.          B2 = new JButton ("Ligne" );
  92.          B2.addActionListener(this);
  93.          P.add(B2);
  94.      
  95.          B3 = new JButton ("Carre" );
  96.          B3.addActionListener(this);
  97.          P.add(B3);
  98.      
  99.          B4 = new JButton ("Rectangle" );
  100.          B4.addActionListener(this);
  101.          P.add(B4);
  102.      
  103.          B5 = new JButton ("Cercle" );
  104.          B5.addActionListener(this);
  105.          P.add(B5);
  106.      
  107.          B6 = new JButton ("Elipse" );
  108.          B6.addActionListener(this);
  109.          P.add(B6);
  110.      
  111.          P.add(new JLabel("" ));
  112.          P.add(new JLabel("Souris " ));
  113.      
  114.          Coord_X = new JTextField(4);
  115.          Coord_X.setEditable(false);
  116.          P.add(Coord_X);
  117.      
  118.      
  119.          Coord_Y = new JTextField(4);
  120.          Coord_Y.setEditable(false);
  121.          P.add(Coord_Y);
  122.      
  123.          P.add(new JLabel("" ));
  124.          P.add(new JLabel("Point 1" ));
  125.      
  126.          Coord_XF1 = new JTextField(4);
  127.          Coord_XF1.setEditable(false);
  128.          P.add(Coord_XF1);
  129.      
  130.      
  131.          Coord_YF1 = new JTextField(4);
  132.          Coord_YF1.setEditable(false);
  133.          P.add(Coord_YF1);
  134.      
  135.          P.add(new JLabel("" ));
  136.          P.add(new JLabel("Point 2" ));
  137.      
  138.          Coord_XF2 = new JTextField(4);
  139.          Coord_XF2.setEditable(false);
  140.          P.add(Coord_XF2);
  141.      
  142.      
  143.          Coord_YF2 = new JTextField(4);
  144.          Coord_YF2.setEditable(false);
  145.          P.add(Coord_YF2);
  146.      
  147.      
  148.          P.add(new JLabel("" ));
  149.          P.add(new JLabel("Longueur" ));
  150.      
  151.          longueur = new JTextField(4);
  152.          longueur.setEditable(false);
  153.          P.add(longueur);
  154.      
  155.      
  156.          add(P,BorderLayout.WEST);
  157.      
  158.       }
  159.  
  160.  
  161.  
  162.        public void Bas()
  163.       {
  164.      
  165.          JPanel P_SUD = new JPanel();
  166.          //P_SUD.setLayout(new GridLayout(2,12));
  167.          Param1 = new JLabel("xmin : " );
  168.          P_SUD.add(Param1);
  169.          xmin = new JTextField(3);
  170.          P_SUD.add(xmin);
  171.      
  172.          Param2 = new JLabel("xmax : " );
  173.          P_SUD.add(Param2);
  174.          xmax = new JTextField(3);
  175.          P_SUD.add(xmax);
  176.      
  177.          Param3 = new JLabel("ymin : " );
  178.          P_SUD.add(Param3);
  179.          ymin = new JTextField(3);
  180.          P_SUD.add(ymin);
  181.      
  182.          Param4 = new JLabel("ymax : " );
  183.          P_SUD.add(Param4);
  184.          ymax = new JTextField(3);
  185.          P_SUD.add(ymax);
  186.      
  187.          Repere = new JButton ("Changer Repere" );
  188.          Repere.addActionListener(this);
  189.          P_SUD.add(Repere);
  190.      
  191.          xmin.setText("-10" );
  192.          xmax.setText("10" );
  193.          ymin.setText("-5" );
  194.          ymax.setText("5" );
  195.      
  196.      
  197.          add(P_SUD,BorderLayout.SOUTH);
  198.      
  199.       }
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.    // GESTION EVENEMENTS
  209.  
  210.  
  211.        public void actionPerformed(ActionEvent e)
  212.       {
  213.          String Choix = e.getActionCommand();
  214.      
  215.          Coord_XF1.setText("" );
  216.          Coord_YF1.setText("" );
  217.          Coord_XF2.setText("" );
  218.          Coord_YF2.setText("" );         
  219.      
  220.          if (Choix.equals("Quitter" ))
  221.          { 
  222.             System.exit(0);
  223.          }
  224.          else if (Choix.equals("Point" ))
  225.          {
  226.             Action = 1;
  227.           //Coord_XF1.setBackground("orange" );
  228.          }
  229.          else if (Choix.equals("Ligne" ))
  230.          {
  231.             Action = 2;
  232.          }
  233.          else if (Choix.equals("Carre" ))
  234.          {
  235.             Action = 3;
  236.          }
  237.          else if (Choix.equals("Rectangle" ))
  238.          {
  239.             Action = 4;
  240.          }
  241.          else if (Choix.equals("Cercle" ))
  242.          {
  243.             Action = 5;
  244.          }
  245.          else if (Choix.equals("Elipse" ))
  246.          {
  247.             Action = 6;
  248.          }
  249.        
  250.          else if (Choix.equals("Changer Repere" ))
  251.          {
  252.        
  253.          // P_Centre=R1.effacerEcran();
  254.             R1=new Repere(Double.parseDouble(xmin.getText()),Double.parseDouble(xmax.getText()),Double.parseDouble(ymin.getText()),Double.parseDouble(ymax.getText()),P_Centre);
  255.        
  256.          }
  257.      
  258.       }
  259.  
  260.  
  261.  
  262.  
  263.  
  264.        private class MouseClickHandler extends MouseAdapter{
  265.      
  266.      
  267.           public void mouseClicked(MouseEvent e)
  268.          {
  269.             nbr++;
  270.        
  271.             if (nbr==1 && Action!=0)
  272.             {
  273.                xl=e.getX();
  274.                yl=e.getY();
  275.                Coord_XF1.setText(Double.toString((int)(100*R1.get_CoordX(e.getX()))/100.00));
  276.                Coord_YF1.setText(String.valueOf((int)(100*R1.get_CoordY(e.getY()))/100.00));
  277.             }
  278.             else if (nbr==2 && Action!=0 && Action!=1)
  279.             { xl1=e.getX();
  280.                yl1=e.getY();
  281.                Coord_XF2.setText(Double.toString((int)(100*R1.get_CoordX(e.getX()))/100.00));
  282.                Coord_YF2.setText(String.valueOf((int)(100*R1.get_CoordY(e.getY()))/100.00));
  283.            
  284.             }
  285.        
  286.        
  287.             System.out.println(Action);
  288.             if (nbr==2 || Action==1)
  289.             {
  290.            
  291.                switch(Action)
  292.                {
  293.                   case 1:
  294.                      {
  295.                         R1.Point_IJ(e.getX(),e.getY());
  296.                         break;
  297.                      }
  298.                  
  299.                   case 2:
  300.                      {
  301.                         R1.ligne_IJ(xl,yl,xl1,yl1);
  302.                         break;
  303.                      }
  304.                  
  305.                   case 3 :
  306.                      {
  307.                         R1.Carre_IJ(xl,yl,xl1);
  308.                         break;
  309.                      }
  310.                  
  311.                   case 4:
  312.                      {
  313.                         R1.Rectangle_IJ(xl,yl,xl1,yl1);
  314.                         break;
  315.                      }
  316.                  
  317.                   case 5:
  318.                      {
  319.                         R1.Cercle_IJ(xl,yl,xl1,yl1);
  320.                         break;
  321.                      }
  322.                  
  323.                   case 6:
  324.                      {
  325.                         R1.Elipse_IJ(xl,yl,xl1,yl1);
  326.                         break;
  327.                      }
  328.              
  329.              
  330.                }
  331.                nbr=0;
  332.            
  333.             }
  334.        
  335.          }
  336.      
  337.           public void mousePressed(MouseEvent e) {}
  338.      
  339.           public void mouseReleased(MouseEvent e) {}
  340.      
  341.           public void mouseEntered(MouseEvent e) {}
  342.      
  343.           public void mouseExited(MouseEvent e)
  344.          {
  345.             Coord_X.setText("Out" );
  346.             Coord_Y.setText("Out" );
  347.          }
  348.      
  349.      
  350.       }
  351.  
  352.  
  353.        private class Mouse_Dep extends MouseMotionAdapter
  354.       {
  355.      
  356.           public void mouseMoved(MouseEvent e)
  357.          {
  358.             try
  359.             {
  360.                Coord_X.setText("x = "+Double.toString((int)(100*R1.get_CoordX(e.getX()))/100.00));
  361.                Coord_Y.setText("y = "+String.valueOf((int)(100*R1.get_CoordY(e.getY()))/100.00));
  362.             }
  363.                 catch (Exception r)
  364.                {
  365.                }
  366.             if (Action == 3 && nbr==1)
  367.                longueur.setText(String.valueOf((int)(100*R1.get_CoordX(Math.abs(xl-e.getX())))/100.00));
  368.        
  369.          }
  370.      
  371.           public void mouseDragged(MouseEvent e) {}
  372.       }
  373.  
  374.  
  375.  
  376.  
  377.  
  378.        public class gestion_resize extends ComponentAdapter
  379.      
  380.      
  381.       {
  382.           public void componentHidden(ComponentEvent e) {}
  383.           public void componentMoved(ComponentEvent e) {}
  384.           public void componentResized(ComponentEvent e)
  385.          {
  386.             R1=new Repere(Double.parseDouble(xmin.getText()),Double.parseDouble(xmax.getText()),Double.parseDouble(ymin.getText()),Double.parseDouble(ymax.getText()),P_Centre);
  387.          }
  388.           public void componentShown(ComponentEvent e) {}
  389.      
  390.      
  391.       }
  392.  
  393.  
  394.    }


 
 
et pour finir la class Repere :
 

Code :
  1. import javax.swing.*;
  2.    import java.awt.*;
  3.    import java.awt.event.*;
  4.     public class Repere extends JPanel
  5.    { private double xmin,xmax,ymin,ymax,w=382,h=196;
  6.       private Dimension dim;
  7.       private JPanel Pan;
  8.       private Graphics g;
  9.  
  10.        public Repere(double xmin,double xmax,double ymin,double ymax,JPanel P)
  11.       {
  12.          double i,j;
  13.      
  14.          Pan=P;
  15.          g=Pan.getGraphics();
  16.      
  17.      
  18.          dim=Pan.getSize();
  19.          if (dim.width!=0) w = dim.width-10;
  20.          if (dim.height!=0) h = dim.height-10;
  21.      
  22.          this.xmin=xmin;
  23.          this.xmax=xmax;
  24.          this.ymin=ymin;
  25.          this.ymax=ymax;
  26.      
  27.          ligne(xmin,0,xmax,0);
  28.          ligne(0,ymax,0,ymin);
  29.      
  30.          for(i=0;i<=(Math.abs(xmax)+Math.abs(xmin));i++)
  31.          {
  32.             ligne(xmin+i,0.1,xmin+i,-.1);
  33.          }
  34.      
  35.          for(j=0;j<=(Math.abs(ymax)+Math.abs(ymin));j++)
  36.          {
  37.             ligne(0.1,ymin+j,-0.1,ymin+j);
  38.          }
  39.       }
  40.  
  41.  
  42.        public void ligne(double x,double y,double x1,double y1)
  43.       {
  44.          g.drawLine(getI(x),getJ(y),getI(x1),getJ(y1));
  45.       }
  46.  
  47.        public void ligne_IJ(int x,int y,int x1,int y1)
  48.       {
  49.          g.drawLine(x,y,x1,y1);
  50.       }
  51.  
  52.  
  53.  
  54.  
  55.  
  56.        public void Point_IJ(int x,int y)
  57.       {
  58.          g.drawLine(x,y,x,y);
  59.       }
  60.  
  61.        public void Point(int x,int y)
  62.       {
  63.          g.drawLine(getI(x),getJ(y),getI(x),getJ(y));
  64.       }
  65.  
  66.  
  67.  
  68.  
  69.        public void Carre_IJ(int x,int y,int l)
  70.       {
  71.      
  72.          g.drawRect(x,y,l,l);
  73.      
  74.      
  75.       }
  76.  
  77.        public void Cercle_IJ(int x,int y,int x1,int y1)
  78.       {
  79.          g.drawOval(x,y,x1-x,x1-x);
  80.      
  81.       }
  82.  
  83.        public void Elipse_IJ(int x,int y,int x1,int y1)
  84.       {
  85.          g.drawOval(x,y,x1-x,y1-y);
  86.      
  87.       }
  88.  
  89.  
  90.  
  91.        public void Rectangle_IJ(int x,int y,int x1,int y1)
  92.       {
  93.          if (x<x1 && y1>=y)
  94.             g.drawRect(x,y,Math.abs(x1-x),Math.abs(y1-y));
  95.      
  96.          if (x<x1 && y1<y)
  97.             g.drawRect(x,y1,Math.abs(x1-x),Math.abs(y1-y));
  98.      
  99.          if (x>=x1 && y1<y)
  100.             g.drawRect(x1,y1,Math.abs(x1-x),Math.abs(y1-y));
  101.      
  102.          if (x>=x1 && y1>=y)
  103.             g.drawRect(x1,y,Math.abs(x1-x),Math.abs(y1-y));
  104.      
  105.       }
  106.  
  107.  
  108.        public int getI(double x)
  109.       {
  110.          return ((int)(w*((x-xmin)/(xmax-xmin))))+5;
  111.       }
  112.  
  113.  
  114.        public int getJ(double y)
  115.       {        
  116.          return ((int)(h*((ymax-y)/(ymax-ymin))))+5;
  117.       }
  118.  
  119.        public double get_CoordX(int i)
  120.       {
  121.          return (i*(xmax-xmin)/w+xmin);
  122.       }
  123.  
  124.  
  125.        public double get_CoordY(int j)
  126.       {        
  127.          return (ymax-j*(ymax-ymin)/h);
  128.       }
  129.  
  130.  
  131.    }


 
voila cherchez l'erreur!


Message édité par thunderbird54 le 24-11-2002 à 01:19:24
Reply

Marsh Posté le 15-11-2002 à 13:46:27    

Je n'ai pas compilé ton truc, mais de ce que j'en ai compris, quand ton fond est redimensionné, tu lui changes son repère. Le problème, c'est que tu crées un nouvel objet Repere : du coup, le fond est obligé de se rafraichir une 2ème fois, puisque son contenu a changé ! Et comme l'objet Repere, qui est un objet java.awt.Panel, n'implémente pas la méthode paint(), c'est l'implémentation de sa classe mère qui est exécutée.
 
Bref : tout cela ne serait pas arrivé si ta classe Repère implémentait correctement paint().
 
ERt, pour conclure, une remarque de base en GUI fenêtré : ne jamais dessiner en dehors du code ou des méthodes réservées au rafraichissement (et qu'est-ce que tu fais, toi, dans ton constructeur de Repère ? Tu dessines un repère !  :non: )


Message édité par BifaceMcLeOD le 15-11-2002 à 13:46:49
Reply

Marsh Posté le 15-11-2002 à 19:06:17    

ben g po eu de cours j'apprend tout seul
 
kes ke tu me conseilles de faire? de creer une methode paint() dans ma classe repere? bizarre
avec le supercomponent et tout?

Reply

Marsh Posté le 15-11-2002 à 22:17:55    

pourrais tu me montrer par un exemple ce que tu me dit a propose de la methode paint() ?
 
Je ne saisis pas tout a fait comment je dois faire.
 
Merci

Reply

Marsh Posté le 18-11-2002 à 10:39:47    

Désolé, mais le week-end, je ne suis plus sur le forum... :o
 
Je te propose de réécrire ton constructeur et (d'écrire) ta méthode paint() comme suit :

Code :
  1. private static final double  tailleTaquet = 0.1;
  2. public Repere(double xmin, double xmax, double ymin, double ymax, JPanel P) {
  3.   this.Pan  = P;
  4.   this.xmin = xmin;
  5.   this.xmax = xmax;
  6.   this.ymin = ymin;
  7.   this.ymax = ymax;
  8. }
  9. public void paint(Graphics g) {
  10.   int  numTaquets;
  11.   // As-tu vraiment besoin de "dim" ailleurs que dans paint() ?
  12.   // Même question pour "w" et "h".
  13.   this.dim = this.Pan.getSize();
  14.   if (this.dim.width  != 0) {
  15.     this.w = this.dim.width  - 10;
  16.   }
  17.   if (this.dim.height != 0) {
  18.     this.h = this.dim.height - 10;
  19.   }
  20.   this.ligne(this.xmin, 0, this.xmax, 0);
  21.   this.ligne(0, this.ymax, 0, this.ymin);
  22.   // Je me demande d'ailleurs s'il ne faudrait pas écrire
  23.   // ici : (int) Math.abs(this.xmax - this.xmin)
  24.   // A voir.
  25.   numTaquets = (int) (Math.abs(this.xmin) + Math.abs(this.xmax));
  26.   for (int i = 0; i <= numTaquets; i++) {
  27.     this.ligne(this.xmin + (double) i,  Repere.tailleTaquet,
  28.                this.xmin + (double) i, -Repere.tailleTaquet);
  29.   }
  30.   // Même remarque qu'au-dessus.
  31.   numTaquets = (int) (Math.abs(this.ymin) + Math.abs(this.ymax));
  32.   for (int i = 0; i <= numTaquets; i++) {
  33.     this.ligne( Repere.tailleTaquet, this.ymin + (double) i,
  34.                -Repere.tailleTaquet, this.ymin + (double) i);
  35.   }
  36. }


 
Et si tu apprends tout seul, je te conseille vivement de lire et de suivre les recommendations de Sun en ce qui concerne la présentation du code. Cela améliore grandement la lisibilité du code (bien qu'il y ait nettement pire que ton code... ;) ).
Je vais tâcher de te retrouver ça...


Message édité par BifaceMcLeOD le 18-11-2002 à 10:41:43
Reply

Marsh Posté le 18-11-2002 à 16:37:53    

J'ai (enfin ! ;) ) retrouvé le lien : http://java.sun.com/docs/codeconv/
 
A lire absolument.

Reply

Marsh Posté le 19-11-2002 à 10:23:35    

j'ai regardé le code que tu as reecrit et une question me vient a l'esprit :  
Quand est ce que se deroule l'appel a paint?
chez moi il n'est pas réalisé.
 
Et pour t remarque, tu as tout a fait raison, je n'ai pas besoin de dim ailleurs que dans paint.
Pour les valeurs absolues aussi!

Reply

Marsh Posté le 19-11-2002 à 10:43:47    

Normalement, c'est le framework AWT qui gère l'appel à paint() (aidé par l'OS sous-jacent, il faut bien le reconnaître).
Plus précisément, un composant est rafraichi lorsque son conteneur (ex : un Panel) le lui demande. Souvent, c'est parce que lui-même a reçu un ordre de se rafraichir lui-même.  
 
Cependant, tu peux forcer le rafraichissement de tout composant graphique (donc en particulier d'un conteneur) en appelant repaint() sur cet objet.


Message édité par BifaceMcLeOD le 19-11-2002 à 10:44:19
Reply

Marsh Posté le 19-11-2002 à 17:46:00    

je dois faire un Pan.repaint() dans le constructeur de repere c ca?
 
c'est de ce j'ai fait, mais ca ne marche pas! (surement lié a une erreur ou un oubli de ma part mais je ne vois pas ou!)
 
je reposte le nouveau code de repere qui s'appelle maintenant repere2 lol.
 
je n'ai pas encore lu les conventions, je m'en excuse.
 

Code :
  1. import javax.swing.*;
  2.    import java.awt.*;
  3.     public class Repere2 extends JPanel
  4.    { private double xmin,xmax,ymin,ymax,w=382,h=196;
  5.       private JPanel Pan;
  6.       private Graphics g;
  7.  
  8.       private static final double tailleTaquet = 0.1;
  9.  
  10.        public Repere2(double xmin, double xmax, double ymin, double ymax, JPanel P)
  11.       {
  12.          this.Pan = P;
  13.      
  14.          this.xmin = xmin;
  15.          this.xmax = xmax;
  16.          this.ymin = ymin;
  17.          this.ymax = ymax;
  18.      
  19.          g=Pan.getGraphics();
  20.          // J'ai besoin de gpour tracer Lignes, Points, Cercle
  21.          // et autres figures!
  22.          Pan.repaint();
  23.          // Est cela qu'il faut faire ?
  24.       }
  25.  
  26.        public void paint(Graphics g) {
  27.          int numTaquets;
  28.          // Bien vu tu as compris le programme ;o)
  29.    
  30.          Dimension dim = this.Pan.getSize();
  31.          // Je n'ai effectivement pas besoin de dim
  32.          // en dehors de la fonction paint!
  33.      
  34.          if (dim.width != 0) {
  35.             this.w = dim.width - 10;
  36.          }
  37.          // Par contre j'ai besoin de w et h ailleurs!
  38.          // (pour tracer les figures geometriques)
  39.        
  40.          if (dim.height != 0) {
  41.             this.h = dim.height - 10;
  42.          }
  43.      
  44.      
  45.          this.ligne(this.xmin, 0, this.xmax, 0);
  46.          this.ligne(0, this.ymax, 0, this.ymin);
  47.      
  48.          numTaquets = (int) (Math.abs(this.xmin)+ Math.abs(this.xmax));
  49.          for (int i = 0; i <= numTaquets; i++) {
  50.             this.ligne(this.xmin + (double) i, tailleTaquet,this.xmin + (double) i, -tailleTaquet);
  51.          }
  52.      
  53.          numTaquets = (int) (Math.abs(this.ymin) + Math.abs(this.ymax));
  54.          for (int i = 0; i <= numTaquets; i++) {
  55.             this.ligne( tailleTaquet, this.ymin + (double) i,-tailleTaquet, this.ymin + (double) i);
  56.          }
  57.       }


Message édité par thunderbird54 le 19-11-2002 à 18:51:05
Reply

Marsh Posté le 19-11-2002 à 19:32:16    

thunderbird54 a écrit a écrit :

je dois faire un Pan.repaint() dans le constructeur de repere c ca?
 
c'est de ce j'ai fait, mais ca ne marche pas! (surement lié a une erreur ou un oubli de ma part mais je ne vois pas ou!)
 
je reposte le nouveau code de repere qui s'appelle maintenant repere2 lol.




 :??:  
Essaie d'appeler Pan.invalidate() à la place de Pan.repaint(), pour voir... :heink:  
Si ça ne marche pas, il va falloir que j'essaie de déboguer ton code chez moi.
 

Citation :


je n'ai pas encore lu les conventions, je m'en excuse.


Ne t'inquiète pas : "Rome ne s'est pas construite en un jour" ;)

Reply

Marsh Posté le 19-11-2002 à 20:41:44    

pan.invalidate() c pareil!
 
en fait, le programme ne rentre jamais dans paint c pour ca!
g fé un test avec un System.out.println("Paint" ); et jamais je ne vois paint qui s'affiche dans la fenetre dos!
 
voila sinon je ne c pas pkoi il ne rentre po dedans!

Reply

Marsh Posté le 20-11-2002 à 23:50:04    

bon g trouvé d'ou vient le probleme, mais ce n'est pas pour ca que je l'ai résolu lol!
 
donc mon programme est articulé autour de 3 classes:
-Fenetre
-Fond
-Repere2
 
Dans fond, on definit un borderlayout et on crée l'interface (menu,bouton,parametres des axes) c'est aussi la que l'on  definit le JPannel P_Centre.
 
Lorsque je fais appel à mon constructeur repere, je lui passe en paramètre ce panneau centre! Le panneau ainsi créée dans Repere2 prend donc l'adresse de panneau centre et lorsque l'on fait un resize, ce n'est pas la methode paint de Repere2 qui est appelée mais celle de Fond!
 
voila je ne c pas si g été tres clair
 
 

Reply

Marsh Posté le 24-11-2002 à 01:14:07    

aidez moi!!! :sweat:

Reply

Marsh Posté le 26-11-2002 à 09:27:20    

Je ne comprends pas bien la hiérarchie de tes composants: le contenu de Fenetre est Fond, mais où est Repere2? Dans une autre fenêtre?


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 26-11-2002 à 13:24:57    

alors en fait repere2 est chargée de redessiner le panneau centre de ma fentre

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed