Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1420 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°244063
thunderbir​d54
Posté le 13-11-2002 à 13:39:04  profilanswer
 

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
mood
Publicité
Posté le 13-11-2002 à 13:39:04  profilanswer
 

n°244111
El_gringo
Posté le 13-11-2002 à 14:15:18  profilanswer
 

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 ?

n°244136
benou
Posté le 13-11-2002 à 14:27:30  profilanswer
 

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

n°244156
El_gringo
Posté le 13-11-2002 à 14:40:00  profilanswer
 

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

n°244212
benou
Posté le 13-11-2002 à 15:52:46  profilanswer
 

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
n°244215
darklord
You're welcome
Posté le 13-11-2002 à 15:56:55  profilanswer
 

[:cupra]


---------------
Just because you feel good does not make you right
n°244571
thunderbir​d54
Posté le 13-11-2002 à 20:53:12  profilanswer
 

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)

n°244588
benou
Posté le 13-11-2002 à 21:10:42  profilanswer
 

petit coup de javadoc ...
 

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

n°244686
ant-103
Posté le 13-11-2002 à 22:48:10  profilanswer
 

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!

n°244744
thunderbir​d54
Posté le 13-11-2002 à 23:32:19  profilanswer
 

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?

mood
Publicité
Posté le 13-11-2002 à 23:32:19  profilanswer
 

n°244745
benou
Posté le 13-11-2002 à 23:33:37  profilanswer
 

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
n°244753
thunderbir​d54
Posté le 13-11-2002 à 23:38:41  profilanswer
 

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

n°244757
benou
Posté le 13-11-2002 à 23:42:18  profilanswer
 

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 ...

n°245035
BifaceMcLe​OD
The HighGlandeur
Posté le 14-11-2002 à 12:01:04  profilanswer
 

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

n°245074
thunderbir​d54
Posté le 14-11-2002 à 13:08:52  profilanswer
 

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

n°245076
BifaceMcLe​OD
The HighGlandeur
Posté le 14-11-2002 à 13:13:24  profilanswer
 

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

n°245594
thunderbir​d54
Posté le 14-11-2002 à 20:59:40  profilanswer
 

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
n°245872
BifaceMcLe​OD
The HighGlandeur
Posté le 15-11-2002 à 13:46:27  profilanswer
 

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
n°246229
thunderbir​d54
Posté le 15-11-2002 à 19:06:17  profilanswer
 

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?

n°246298
thunderbir​d54
Posté le 15-11-2002 à 22:17:55  profilanswer
 

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

n°247452
BifaceMcLe​OD
The HighGlandeur
Posté le 18-11-2002 à 10:39:47  profilanswer
 

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
n°247776
BifaceMcLe​OD
The HighGlandeur
Posté le 18-11-2002 à 16:37:53  profilanswer
 

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

n°248208
thunderbir​d54
Posté le 19-11-2002 à 10:23:35  profilanswer
 

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!

n°248221
BifaceMcLe​OD
The HighGlandeur
Posté le 19-11-2002 à 10:43:47  profilanswer
 

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
n°248770
thunderbir​d54
Posté le 19-11-2002 à 17:46:00  profilanswer
 

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
n°248956
BifaceMcLe​OD
The HighGlandeur
Posté le 19-11-2002 à 19:32:16  profilanswer
 

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" ;)

n°249012
thunderbir​d54
Posté le 19-11-2002 à 20:41:44  profilanswer
 

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!

n°250280
thunderbir​d54
Posté le 20-11-2002 à 23:50:04  profilanswer
 

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
 
 

n°252373
thunderbir​d54
Posté le 24-11-2002 à 01:14:07  profilanswer
 

aidez moi!!! :sweat:

n°253726
Krueger
tout salaire demande dutravail
Posté le 26-11-2002 à 09:27:20  profilanswer
 

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
n°253927
thunderbir​d54
Posté le 26-11-2002 à 13:24:57  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
Chat en java, PB socket sur wanadoo ?java-nombre de lignes d un fichier texte
[C++ & Java] Quel programme simple et efficace pour développer ?Où sont les fonctions trigo ? [résolu]
[Java 1.1] drawOval --> cercles tout moches sous WinAccès port série avec Java
[JAVA] Je voudrais faire un chat en P2P mais je sais pas comment faireapplet java IRC
Copie d'une liste doublement chainée 
Plus de sujets relatifs à : Liste Chainée en java | Gérer le resize [Resolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR