Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec un JButton customisé

Sujet résolu
    20 mai 2016 à 13:20:22

    Bonjour,

    j'essaie de créer un menu pour un projet D'ISN et j'ai un problème avec un JButton customisé.

    Voilà le code de ma classe qui personnalise les boutons: 

    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JButton;
    
    public class boutons extends JButton implements MouseListener{
    	Dimension size = new Dimension(100,50);
    	String texte = "";
    	
    	public boutons(String texte){
    		setVisible(true);
    		
    		this.texte = texte;
    		
    		addMouseListener(this);
    	}
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		
    	}
    	@Override
    	public void mouseEntered(MouseEvent e) {
    		
    	}
    	@Override
    	public void mouseExited(MouseEvent e) {
    		
    	}
    	@Override
    	public void mousePressed(MouseEvent e) {
    		
    	}
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		
    	}
    	@Override
    	public Dimension getPreferredSize(){
    		return size;
    	}
    	@Override
    	public Dimension getMaximumSize(){
    		return size;
    	}
    	@Override
    	public Dimension getMinimumSize(){
    		return size;
    	}
    
    	
    	public void setButton(String texte){
    		this.texte = texte;
    		
    	}
    	
    	public String getButton(){
    		return texte;
    	}
    }
    

    Et voici celui de la classe principale.

    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import java.awt.*;
    
    
    public class Core extends JFrame{
    	public Core(){
    		JPanel boutonsmenu = new JPanel();
    		
    		setTitle("Hell's Revenge");
    		setSize(800,600);
    		setResizable(false);
    		
    		boutons button = new boutons("TEEEEEEEEEEST");
    		boutonsmenu.add(button);
    		add(boutonsmenu);
    		
    		
    		boutonsmenu.setBackground(java.awt.Color.DARK_GRAY);
    		
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setVisible(true);
    		//On set l'icone de la fenetre
    	    ImageIcon icone = new ImageIcon("icon.jpg");
    	    ImageIcon bg = new ImageIcon("background.jpg");
    	    this.setIconImage(icone.getImage());
    	    JLabel backg = new JLabel();
    	    backg.setIcon(bg);
    	      
    	    //On positionne la fenetre
    	    setLocationRelativeTo(null);
    	    
    	}
    	
    	public static void main(String[] args){
    		new Core();
    		
    	}
    }
    

    Sauf que le bouton reste désespérément vide de texte.

    Quelqu'un pourrait m'aider?
     

    • Partager sur Facebook
    • Partager sur Twitter
    A wizard is never late, nor is he early. He arrives precisely when he means to.
      20 mai 2016 à 13:51:02

      Salut,

      Je pense qu'il faut passer par le constructeur de JButton, la classe mere :

         public boutons(String texte){
      super(texte);
               
              this.texte = texte;
               
              addMouseListener(this);
              setVisible(true);
          }

      PS : par convention les noms de classe commencent par une majuscule, donc Buttons ;)

      -
      Edité par BabC 20 mai 2016 à 13:51:28

      • Partager sur Facebook
      • Partager sur Twitter
        20 mai 2016 à 18:38:12

        HALLELUJA!!

        Merci beaucoup de ton aide! Enfin ça affiche ce que je veux!

        Du coup le problème s'est déplacé.
        Par le plus grand des hasards, tu ne saurais pas comment afficher une image en arrière plan (genre un fond d'écran)? 
        Le code que j'ai mis dans la classe Core n'affiche rien :

        	public void paintComponent(Graphics g){
        		super.paintComponents(g);
        		g.drawImage(new ImageIcon(Core.class.getResource("background.jpg")).getImage(), 0, 0, 800, 600, this);
        		
        	}

        Faut-il que j'y ajoute quelque chose?
         

        Edit : Problème résolu. Par contre les boutons n'apparaissent que si je passe la souris dessus...

        -
        Edité par Энигмa 20 mai 2016 à 21:58:40

        • Partager sur Facebook
        • Partager sur Twitter
        A wizard is never late, nor is he early. He arrives precisely when he means to.
          23 mai 2016 à 9:40:16

          Il doit te manquer un repaint(); ou l'ordre d'initialisation ne va pas (si tu dessine tes boutons en premier, et après ton fond d'ecran, alors l'image sera au dessus des boutons (je pense ^^ ))
          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2016 à 20:17:15

            Le fait est que si je dessine mes boutons apres le background ils n'apparaissent qu'après avoir passé la souris sur leur emplacement...
            • Partager sur Facebook
            • Partager sur Twitter
            A wizard is never late, nor is he early. He arrives precisely when he means to.
              25 mai 2016 à 9:11:55

              Fais voir ton code de Jframe s'il te plait !

              Je pense que mettre le setVisible(true) a la fin changera peut etre (peut etre hein ^^ ) quelque chose car de memoire c'est la que les thread d'affichage se lancent. Donc coller aux panels les bouton et le background après foire un peu.

              • Partager sur Facebook
              • Partager sur Twitter
                25 mai 2016 à 21:32:05

                Voilà voilà!
                Donc voilà le code de ma classe qui gère le JFrame et le JPanel
                public class Core extends JFrame{
                	private static final long serialVersionUID = 1L;
                
                	public Core(){
                		
                		//On en définit les paramètres
                		JLabel Titre = new JLabel(new ImageIcon("Titre.png"),JLabel.CENTER);
                		Titre.setPreferredSize(new Dimension(800,300));
                		Titre.setMaximumSize(new Dimension(800,300));
                		Titre.setMinimumSize(new Dimension(800,300));
                		this.add(Titre);
                		
                		setTitle("Hell's Revenge");
                		setSize(800,600);
                		setResizable(false);
                		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                		setVisible(true);
                	    setLocationRelativeTo(null);
                	    
                		//On ajoute le menu
                		JPanel menu = new Menu();
                		this.add(menu);
                		
                		//On set l'icone de la fenetre
                	    ImageIcon icone = new ImageIcon("icon.jpg");
                	    this.setIconImage(icone.getImage());
                	    
                	}
                	
                	public static void main(String[] args){
                		new Core();
                		
                		/* NE MARCHE PAS
                		try {
                			URL url = Core.class.getResource("menu.wav");
                			AudioInputStream audio = AudioSystem.getAudioInputStream(url);
                			Clip music = AudioSystem.getClip();
                			music.open(audio);
                			music.loop(-1);
                		} catch (Exception ex) {}*/
                	}
                	
                	//On ajoute un fond d'écran au menu (inutile)
                	/*class Panneau extends JPanel{
                		public void paintComponent(Graphics g){
                			try {
                				Image background = ImageIO.read(new File("backgroud.jpg"));
                				g.drawImage(background, 0, 0, 800, 600, this);
                			} catch (IOException e) {
                				e.printStackTrace();
                			}
                		}
                	}*/
                }

                Et, tant qu'on y est, la classe qui gère les boutons

                ublic class Boutons extends JButton implements MouseListener{
                	private static final long serialVersionUID = 1L;
                	Dimension size = new Dimension(200,75);
                    private String texte = "";
                    private Image background;
                     
                    //On met un fond d'écran aux boutons
                    @Override
                    public void paintComponent(Graphics g){
                        switch (texte) {
                            case "START":
                                try {
                                    background = ImageIO.read(new File("buttonBgStart.png"));
                                    g.drawImage(background, 0, 0, this.getWidth(), this.getHeight(), this);
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                break;
                                 
                            case "EXIT":
                                try {
                                    background = ImageIO.read(new File("buttonBgExit.png"));
                                    g.drawImage(background, 0, 0, this.getWidth(), this.getHeight(), this);
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                break;
                        }
                    }
                     
                    //On enlève les bordures des boutons
                     
                    //On définit les paramètre de tous les boutons communs au menu
                    public Boutons(String texte){
                        super(texte);
                        this.texte = texte;
                        addMouseListener(this);
                        setVisible(true);
                        this.setOpaque(true);
                    }
                 
                     
                    //On dit au programme de n'écouter que les paramètre de cette classe
                    //Ainsi le programme se controle lui même.
                    @Override
                    public void mouseClicked(MouseEvent e) {
                         
                    }
                     
                    //Dans le cas ou la souris survole le bouton
                    @Override
                    public void mouseEntered(MouseEvent e) {
                        switch (texte) {
                        case "START":
                            try {
                                background = ImageIO.read(new File("buttonBgStartHover.png"));
                                
                            } catch (IOException ex) {
                                ex.printStackTrace();
                            }
                            break;
                             
                        case "EXIT":
                            try {
                                background = ImageIO.read(new File("buttonBgExitHover.png"));
                                
                            } catch (IOException ex) {
                                ex.printStackTrace();
                            }
                            break;
                        }
                    }
                    //Dans le cas ou la souris quitte le bouton
                    @Override
                    public void mouseExited(MouseEvent e) {
                        switch (texte) {
                        case "START":
                            try {
                                background = ImageIO.read(new File("buttonBgStart.png"));
                            } catch (IOException ex) {
                                ex.printStackTrace();
                            }
                            break;
                             
                        case "EXIT":
                            try {
                                background = ImageIO.read(new File("buttonBgExit.png"));
                            } catch (IOException ex) {
                                ex.printStackTrace();
                            }
                            break;
                        }
                    }
                    @Override
                    public void mousePressed(MouseEvent e) {
                         
                    }
                    @Override
                    public void mouseReleased(MouseEvent e) {
                         
                    }
                    @Override
                    public Dimension getPreferredSize(){
                        return size;
                    }
                    @Override
                    public Dimension getMaximumSize(){
                        return size;
                    }
                    @Override
                    public Dimension getMinimumSize(){
                        return size;
                    }
                     
                    public void setButton(String texte){
                        this.texte = texte;
                         
                    }
                     
                    public String getButton(){
                        return texte;
                    }
                }

                PS : je suis débutant donc tout ce code n'est ni propore ni optimisé :p

                • Partager sur Facebook
                • Partager sur Twitter
                A wizard is never late, nor is he early. He arrives precisely when he means to.
                  26 mai 2016 à 9:25:08

                  Tu les ajoutes ou tes boutons ?

                  Essaie :

                     public Core(){
                           
                          //On en définit les paramètres
                          JLabel Titre = new JLabel(new ImageIcon("Titre.png"),JLabel.CENTER);
                          Titre.setPreferredSize(new Dimension(800,300));
                          Titre.setMaximumSize(new Dimension(800,300));
                          Titre.setMinimumSize(new Dimension(800,300));
                          this.add(Titre);
                           
                          setTitle("Hell's Revenge");
                          setSize(800,600);
                          setResizable(false);
                          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                          setLocationRelativeTo(null);
                           
                          //On ajoute le menu
                          JPanel menu = new Menu();
                          this.add(menu);
                           
                          //On set l'icone de la fenetre
                          ImageIcon icone = new ImageIcon("icon.jpg");
                          this.setIconImage(icone.getImage());
                           
                  
                          setVisible(true);
                      }

                  Pour ta classe Boutons, pas la peine d'implementer des MouseListener, JButton a la possibilite d'avoir des Listener deja ;)

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Problème avec un JButton customisé

                  × 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