IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Bouton qui ne prend pas la dimension demandée


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Par défaut Bouton qui ne prend pas la dimension demandée
    Bonjours alors voici mon probleme j'ai crée une class bouton extends JButton puis dedent j'ai mis un fillRect(0,0,300,80) sauf que il ne veu pas prendre les dimension que je lui demande de prendre peu importe se que je lui donne comme dimension il reste tout petit.

    voici un image du programe avec le bouton en bas qui refuse de prendre les dimension demander: Nom : 4f71709575afc5761bb1623e3a9ec815.png
Affichages : 108
Taille : 14,0 Ko

    voici ma classe fenetre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class fenetre extends JFrame 
    {
      private Panneau pan = new Panneau();
      private bouton b = new bouton();
      private JPanel container = new JPanel();
     
      public fenetre() 
      {
        this.setTitle("Animation");
        this.setSize(300, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        container.setBackground(Color.WHITE);
        container.setLayout(new BorderLayout());
        container.add(b, BorderLayout.SOUTH);
        container.add(pan,BorderLayout.CENTER);
        this.setContentPane(container);
        this.setVisible(true);
        this.setResizable(false);
        go();
      }
     
      private void go() 
      {
        // Les coordonnées de départ de notre rond
        int x = pan.getPosX(), y = pan.getPosY();
        // Le booléen pour savoir si l'on recule ou non sur l'axe x
        boolean backX = false;
        // Le booléen pour savoir si l'on recule ou non sur l'axe y
        boolean backY = false;
     
        // Dans cet exemple, j'utilise une boucle while
        // Vous verrez qu'elle fonctionne très bien
        while (true) 
        {
          // Si la coordonnée x est inférieure à 1, on avance
          if (x < 1)
            backX = false;
          // Si la coordonnée x est supérieure à la taille du Panneau moins la taille du rond, on recule
          if (x > pan.getWidth() - 50)
            backX = true;
          // Idem pour l'axe y
          if (y < 1)
            backY = false;
          if (y > pan.getHeight() - 50)
            backY = true;
     
          // Si on avance, on incrémente la coordonnée
          // backX est un booléen, donc !backX revient à écrire
          // if (backX == false)
          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);
     
          // On redessine notre Panneau
          pan.repaint();
          // Comme on dit : la pause s'impose ! Ici, trois millièmes de seconde
          try 
          {
            Thread.sleep(3);
          } 
     
          catch (InterruptedException e) 
          {
            e.printStackTrace();
          }
        }
      }
    }
    et voici ma classe bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
     
     
    public class bouton extends JButton
    {
        public void paintComponent(Graphics g)
        {
            g.setColor(Color.white);
            g.fillRect(0, 0, 300, 80);
            g.setColor(Color.BLACK);
            g.drawString("go", this.getWidth()/2,this.getHeight()/2);
        }
     
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    fillRectangle() n'a rien à voir avec les dimensions d'un bouton : c'est setBounds pour donner sa position et sa taille, si on le met dans un container sans layout manager, et dans un container avec layout manager, selon ses preferredSize, maximumSize et minimumSize, et les règles du layout manager.

    Pourquoi utiliser un JButton, si c'est pour redessiner par dessus son apparence ? Autant utiliser un JLabel, ou un JPanel. Ici, ton bouton a cette taille parce qu'il n'a pas de texte et qu'il est placé au sud d'un BorderLayout : il prend donc la taille de sa bordure. L'avantage de laisser le bouton se charger du texte, plutôt que de le dessiner soit même est également dans la gestion du centrage : la façon que tu utilises ne peut fonctionner qu'en horizontal. En vertical, ça ne peut pas fonctionner parce que le paramètre y de drawString est la position de la baseline, pas le sommet.

    Sinon solution pour faire un bouton comme tu le veux, à partir d'un JButton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Bouton extends JButton {
     
    	public Bouton() {
    		super("go");
    		setBorder(BorderFactory.createEmptyBorder());
    		setBackground(Color.WHITE);
    		setForeground(Color.BLACK);
    		setPreferredSize(new Dimension(300,80)); // taille indicative, la taille finale dépendera du layout manager
    	}
     
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 10
    Dernier message: 07/01/2007, 12h03
  2. Texte qui ne prend pas la bonne couleur
    Par lodan dans le forum Mise en page CSS
    Réponses: 24
    Dernier message: 20/09/2006, 09h05
  3. [Tableaux] Variable qui ne prend pas sa valeur
    Par stephane78 dans le forum Langage
    Réponses: 11
    Dernier message: 19/08/2006, 20h30
  4. [JAR] Archive qui ne prend pas en compte librairie externe
    Par Shiryu44 dans le forum Général Java
    Réponses: 3
    Dernier message: 22/04/2005, 13h59
  5. [JFrame] événement qui ne prend pas
    Par Ymer dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 24/11/2004, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo