Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java] Affichage de plusieurs containers

--' Dsl, j'ai pas trouvé...

    8 juillet 2011 à 22:03:02

    Salut tt le monde!
    Voila, je me suis mis a Java donc j'ai suivi le tuto et j'ai fait un premier projet dont voici le code:
    classe Window:

    import java.awt.BorderLayout;
    import java.awt.Color;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    @SuppressWarnings("serial")
    public class Window extends JFrame{
     
            private Panneau pan = new Panneau();
            private Barre barre = new Barre();
            private Button bouton_gauche = new Button("  < ");
            private Button bouton_droit = new Button("  > ");
            private JPanel container = new JPanel();
            
            public Window(){
            	
                    this.setTitle("BlockBreaker");
                    this.setSize(400,400);
                    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    this.setLocationRelativeTo(null);
                    this.setLayout(new BorderLayout());
                    barre.add(bouton_gauche, BorderLayout.SOUTH);
                    barre.add(bouton_droit, BorderLayout.SOUTH);
                    
                    barre.setBackground(Color.white);
                    container.setBackground(Color.white);
                    container.setLayout(new BorderLayout());
                    container.add(pan,BorderLayout.CENTER);
                    container.add(barre,BorderLayout.SOUTH);
                    this.setContentPane(container);
                    this.setVisible(true);
                    
                    go();
            }
            
            private void go(){
                    
            	int x = pan.getPosX(), y = pan.getPosY();
                boolean backX = false;
                boolean backY = false;
                
                while(true){
                       
                        if(x < 1)backX = false;
                        if(x > pan.getWidth()-50)backX = true;
                        
                        if(y < 1)backY = false;
                        if(y > pan.getHeight()-50)backY = true;
                        
                        if(!backX)
                                pan.setPosX(++x);
                        else
                                pan.setPosX(--x);
                        
                        if(!backY)
                                pan.setPosY(++y);
                        else
                                pan.setPosY(--y);
                        
                        pan.repaint();
                        try {
                                Thread.sleep(3);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                }
    
                    
            }       
    }
    



    classe Panneau(pour la balle)

    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
    @SuppressWarnings("serial")
    public class Panneau extends JPanel {
     
            private int posX = -50;
            private int posY = -50;
            
            public void paintComponent(Graphics g){
            	
            	g.setColor(Color.white);
                g.fillRect(0, 0, this.getWidth(), this.getHeight());    
            	g.setColor(Color.red);
                g.fillOval(posX, posY, 20, 20);
                
            }
     
            public int getPosX() {
                    return posX;
            }
     
            public void setPosX(int posX) {
                    this.posX = posX;
            }
     
            public int getPosY() {
                    return posY;
            }
     
            public void setPosY(int posY) {
                    this.posY = posY;
            }
            
    }
    



    et ma classe Barre:

    import java.awt.Color;
    import java.awt.Graphics;
    
    import javax.swing.JPanel;
    
    @SuppressWarnings("serial")
    public class Barre extends JPanel{
    	
    	private int temp_x = getHeight()/2;
    	private int pos_x = temp_x-35;
        
        private int temp_y = getWidth();
        private int pos_y = temp_y-10;
    	
    	public void paintComponent(Graphics g){
    		
    		g.setColor(Color.white);
    	    g.fillRect(0, 0, this.getWidth(), this.getHeight());    
    	    g.setColor(Color.cyan);
    	    g.fillRoundRect(pos_x,pos_y,70,15,10,25);
    	}
    }
    

    Image utilisateur

    :'( donc voila, je crois que vous avez tous compris! ;)
    Donc si quelqu'un a une explication à ce phénomène psk la, je... je déprime :lol:

    • Partager sur Facebook
    • Partager sur Twitter
      10 juillet 2011 à 12:05:02

      Le message qui suit est une réponse automatique activée par un modérateur.
      Les réponses automatiques permettent d'éviter aux modérateurs d'avoir à répéter de nombreuses fois la même chose, et donc de leur faire gagner beaucoup de temps.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter le modérateur en question par MP.


      Merci d'utiliser les balises de code


      Bonjour,

      Les forums du Site du Zér0 disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source.
      Vous avez posté un code source sans utiliser cette fonctionnalité. Pourriez-vous éditer votre message afin d'ajouter ces balises ? Pour cela, sélectionnez votre code à colorer et utilisez le bouton Image utilisateur afin de choisir la coloration adaptée. Veillez à bien choisir le langage de programmation afin que la coloration soit pertinente.

      De plus, veillez à ce que votre code soit correctement indenté.

      Afin de ne pas surcharger le sujet, ne postez pas votre code coloré dans un nouveau message mais éditez le premier (grâce au bouton Image utilisateur).

      Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.

      Voici un exemple de code non coloré (mauvais exemple) :

      int main(int argc, char *argv[])
      {
      long choixOperation;

      printf("Choisissez l'operation a effectuer");
      /* etc. */
      }

      Voici maintenant le même code coloré, utilisant la balise "code" (bon exemple) :

      int main(int argc, char *argv[])
      {
          long choixOperation;
      
          printf("Choisissez l'operation a effectuer");
          /* etc. */
      }
      


      C'est plus clair n'est-ce pas ? ;)

      Plus d'informations à ce sujet.

      Merci de votre compréhension. :)
      Les modérateurs.
      • Partager sur Facebook
      • Partager sur Twitter
        12 juillet 2011 à 16:06:35

        Perso, je vois pas où est le problème ? Si tu veux pas du machin cyan, supprime le code :

        g.setColor(Color.cyan);
        g.fillRoundRect(pos_x,pos_y,70,15,10,25);
        


        Non ?

        Edit : en fait, je pense que ton souci c'est qu'il est placé où tu voudrais, ce qui m'étonnerais pas vu que tu as l'air d'avoir inversé x et y (ou width et height) dans cette partie la du code :

        private int temp_x = getHeight()/2;
        private int pos_x = temp_x-35;
        private int temp_y = getWidth();
        private int pos_y = temp_y-10;
        


        Après, pas facile de savoir le rendu que tu voulais vraiment ^^
        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2011 à 20:21:36

          Le probleme c'est que meme si j'ai inversé les 2 fonctions, l'affichage de la barre bleue ne change pas! Et de plus, le probleme central est que le moitié de la barre cyan est cachée.
          • Partager sur Facebook
          • Partager sur Twitter

          [Java] Affichage de plusieurs containers

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown