Partage
  • Partager sur Facebook
  • Partager sur Twitter

MouseListener

JLabel(new ImageIcon("..."));

    21 juillet 2016 à 13:21:21

    Bonjour, j'ai un petit problème que j'essaie de régler à petite échelle avant de l'appliquer à mon programme : dans ce programme j'ai une sorte de grille, CàD un JLabel[][], mais pour cet exemple j'ai essayé de raisonner à plus petite dose :)

    J'ai créé une JFrame basique qui ne comporte qu'un JPanel qui lui-même comporte un JLabel comme le montre mon code et je dispose de trois images, un rectangle gris clair (h0.png), un rectangle noir (h1.png) et un dernier rectangle vert (h2.png). Je voudrais que le carré initial soit gris clair, mais que quand on passe dessus il devienne noir, que quand on "entre" dessus il devienne vert et que quand on sorte de lui il reprenne sa couleur initiale, c'est-à-dire gris clair. Or, j'aimerais qu'une fois qu'on a cliqué dessus on ne puisse plus agir avec lui et donc enlever le Listener, voici mon code mais ça ne marche pas trop, ce que j'ai écrit me paraissais logique mais le fait est que ça ne marche pas, est-ce que quelqu'un pourrait m'aider? :) Merci d'avance

    MON CODE :

    import java.awt.event.MouseEvent; import java.awt.event.MouseListener;

    import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;

    public class Main222222{

    static JPanel panel = new JPanel();
    static JLabel label = new JLabel(new ImageIcon("img/h0.png"));
    
    public static void main(String[] args){
    	
    	JFrame frame = new JFrame("Test");
    	frame.setSize(500, 500);
    	frame.setLocationRelativeTo(null);
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	
    	panel.add(label);
    	label.addMouseListener(new Detect());
    	
    	frame.add(panel);
    	
    	frame.setVisible(true);
    	
    }
    
    private static class Detect implements MouseListener{
    
    	@Override
    	public void mouseClicked(MouseEvent e){
    		
    		panel.remove(label);
    		label = new JLabel(new ImageIcon("img/h1.png")); //QUAND ON CLIQUE SUR LE CARRÉ IL DEVIENT NOIR ET ON NE PEUT PLUS NTERRAGIR AVEC LUI
    		panel.add(label);
    		panel.revalidate();
    		System.out.println("CLICKED");
    		
    	}
    
    	@Override
    	public void mouseEntered(MouseEvent e){
    		
    		panel.remove(label);
    		label = new JLabel(new ImageIcon("img/h2.png")); //QUAND ON ENTRE SUR LE CARRÉ IL DEVIENT VERT
    		label.addMouseListener(this);
    		panel.add(label);
    		panel.revalidate();
    		System.out.println("ENTERED");
    		
    	}
    
    	@Override
    	public void mouseExited(MouseEvent e){
    		
    		panel.remove(label);
    		label = new JLabel(new ImageIcon("img/h0.png")); //QUAND ON SORT DU CARRÉ IL DEVIENT GRIS CLAIR
    		label.addMouseListener(this);
    		panel.add(label);
    		panel.revalidate();
    		System.out.println("EXITED");
    		
    	}
    
    	@Override
    	public void mousePressed(MouseEvent e){}
    
    	@Override
    	public void mouseReleased(MouseEvent e){}
    	
    }
    
    

    }

    //MAIS DU COUP IL N'Y A QUE DES ENTERED QUI S'AFFICHENT DÈS QUE JE FAIS LE MOINDRE MOUVEMENT AVEC LA SOURIS AU DESSUS DE MON RECTANGLE?!

    -
    Edité par AxelCarré 21 juillet 2016 à 13:38:11

    • Partager sur Facebook
    • Partager sur Twitter
      23 juillet 2016 à 13:29:05

      Bonjour est-ce quelqu'un pourrait m'aider ou me dire mon erreur et donc pourquoi je n'ai eu aucune réponse, merci d'avance :)

      • Partager sur Facebook
      • Partager sur Twitter
        23 juillet 2016 à 14:38:22

        Salut,

        Une solution : utilise un boolean que tu passe à true ou false lors d'un clic. Ce boolean sera vérifié au début de MouseEntered (si déjà cliqué alors on ne change pas la couleur)

        private static class Detect implements MouseListener{
        
            private boolean clic = false;
        
            @Override
            public void mouseClicked(MouseEvent e){
             clic = !clic; // inverse le boolean
            }
        
            @Override
            public void mouseEntered(MouseEvent e){
             if(!clic){
              //change la couleur
             }
            }
        
            @Override
            public void mouseExited(MouseEvent e){
            }
        
            @Override
            public void mousePressed(MouseEvent e){}
        
            @Override
            public void mouseReleased(MouseEvent e){}
        
        }



        • Partager sur Facebook
        • Partager sur Twitter

        MouseListener

        × 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