Partage
  • Partager sur Facebook
  • Partager sur Twitter

Keypressed

Sujet résolu
    16 avril 2012 à 9:28:04

    Bonjour,
    Débutant en java, j'essaie de faire un rectangle qui puisse être déplacé dans une fenêtre. J'ai donc utilisé (mal certainement) Keypressed mais cela n'entraine aucune modification. Est-il mal placé ?
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    public class Fenetre extends JFrame implements ActionListener, KeyListener {
    
    	private Panneau pan = new Panneau();
    	private JButton bouton = new JButton("Jouer!");
    	private JPanel container = new JPanel();
    
    	private boolean animation = true;
    	int x = pan.getPosX(), y = pan.getPosY();
    	
    	public Fenetre()
    	{
    		
    		this.setTitle("Rectangle");
    		this.setSize(400, 500);
    		this.setLocationRelativeTo(null);
    		this.setResizable(true); // Rend la fenetre agrandissable ou non
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		
    		container.setBackground(Color.black);
    		container.setLayout(new BorderLayout());
    		container.add(pan, BorderLayout.CENTER);
    		container.add(bouton, BorderLayout.SOUTH);		
    		
    		bouton.addActionListener(this);
    		bouton.setEnabled(true); // Rend le bouton cliquable ou non
    		
    		this.setContentPane(container);
    		this.setVisible(true);
    		
    		bouge();
    		
    	}
    
    	private void bouge(){
    		
    		//
    		
    		boolean backX = false;
    		
    		boolean backY = false;
    		
    	
    		while(this.animation)
    		{
    			
    			
    			if(x<1)backX = false;
    			
    			if(x > pan.getWidth()-30)backX = true;
    			
    			if(y<1)backY = false;
    			
    			if(y > pan.getHeight()-40)backY = true;
    			
    			
    			/*if(!backX)
                    pan.setPosX(++x);
            Sinon, on décrémente
            else
                    pan.setPosX(--x)*/;
            
            //Idem pour l'axe Y
            if(!backY)
                    pan.setPosY(++y);
            else
                    pan.setPosY(--y);
    
    
    			pan.repaint();
    
    			try {
    				Thread.sleep(10);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    		
    		
    		
    	}
    	
    	public void actionPerformed(ActionEvent arg0)
    	{
    		animation = false;
    	}
    
    	
    	public void keyPressed(KeyEvent e) {
    		int key = e.getKeyCode();
    		
    		switch (key) {
    			case  KeyEvent.VK_DOWN : 
    				y+=1;
    
    
    			case KeyEvent.VK_UP:
    				y-=1;
    
    				break;
    			case KeyEvent.VK_RIGHT:
    				x+=1;
    				break;
    			case KeyEvent.VK_LEFT:
    				x-=1;
    				break;
    		}
    		repaint();
    
    		}
    
    		
    	
    
    	@Override
    	public void keyReleased(KeyEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void keyTyped(KeyEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    	
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 avril 2012 à 16:45:46

      Je me trompe peut-être mais dans le BorderLayout, le composant CENTER prend toute la place disponible en plus, tu n'as pas défini de taille pour ton panneau. Donc il doit remplir tout l'espace et ne peut donc pas bouger.
      • Partager sur Facebook
      • Partager sur Twitter
        16 avril 2012 à 17:09:15

        Je te remercie pour ta réponse. Le fait d'avoir un bouton sur toute la largeur de la page est voulu.
        J'ai réussi à résoudre mon problème.
        • Partager sur Facebook
        • Partager sur Twitter

        Keypressed

        × 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