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 :

Enlever marge JButton


Sujet :

Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut Enlever marge JButton
    Bonjour,
    je suis étudiant en seconde année de licence info, et j'ai un projet à faire.
    Je dois faire un damier. Le code est correcte, mais pour les cases du bord de damier, j'aimerais mettre une bordure. Chaque case est un bouton. je met donc une image dans les boutons, mais l'image ne fait pas toute la taille du bouton, ce qui est très gênant.
    J'ai u certain forum sur le même problème, mais sans aboutissement.

    Voila le code que j'ai trouvé, et amélioré :

    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
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.*;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.*;
     
     
    public class Damier extends JFrame {
    	private JButton bouton3;
    	int largeur = 10;
    	int longeur = 10;
    	int taille = 50;
    	JButton [][]tab=new JButton[largeur][longeur]; 
    	Container cont=getContentPane(); 
     
    	public Damier(){ 
     
    		// Propriétés de la fenêtre
    		setTitle("Jetons foux par défaut"); 
    		setSize(600,600);
    		setLocationRelativeTo(null); 
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     
    		JPanel p1 = new JPanel(); 
    		p1.setLayout(new GridLayout(largeur,longeur)); // Le GridLayout permet de créer une grille dans laquelle on placera des composants graphiques : ici des JPanel
     
    		Insets emptyInsets = new Insets(0,0,0,0);
     
    		for(int i=0;i<=(largeur-1);i++) 
    		for(int j=0;j<=(longeur-1);j++){ 
    		tab[i][j]=new JButton(); 
    		p1.add(tab[i][j]); // On place le panel contenu dans tab[i][j] dans le panel p1.
    		// Tous les panels du tableau tab seront de même taille grace au GridLayout
    		tab[i][j].setPreferredSize(new Dimension(taille,taille));
    		} 
     
    		// On change la couleur des panels du tableau tab
    		for(int i=0; i<(largeur);i++) 
    		for(int j=0; j<(longeur);j++){ 
     
    			if (i==0 || j==0||i==largeur-1||j==longeur-1){
    				bouton3 = new JButton (new ImageIcon(getClass().getClassLoader().getResource("image/bordure.png")));
    				bouton3.setMargin(emptyInsets);
    				bouton3.setBorder(null); //Le bouton présente toujours une marge.
    				tab[i][j].add(bouton3, p1);
    			}else{
    				if(((i+j)%2)==0)
    				tab[i][j].setBackground(Color.black);
    				else
    				tab[i][j].setBackground(Color.white); 
    			}
    		} 
     
    		cont.add(p1); // On place p1 dans un Container
    	}
     
     
     
     
     
    	public static void main(String[] args) {
     
    		Damier damier = new Damier();
    		damier.setVisible(true); 
    	}
     
    }
    Le résultat est visible en pièce jointe.
    Comment puis-je enlever cette marge ?
    Cordialement
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour ce genre de truc (plateaux de jeu et tout le tralala), on évite d'utiliser des JButtons et des layouts.

    On prend un unique composant dont on redéfini la méthode paintComponent dans laquelle on redessine directement le plateau en utilisant les graphics fourni en paramètre.

    Cela permet d'avoir un contrôle parfait sur ce qui est dessiné, tout en gérant les redimensionnements du composant (en se basant sur les méthodes getWidth/getHeight du composant).

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Ce ne serait pas plutôt la bordure qui s'affiche ?

    Essaye avec setBorderPainted(false).

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Bonjour.
    Merci de vos réponses. J'ai essayé d'ajouter un setBorderPainted(false) à tous les boutons, mais malheureusement cela n'a rien changer.
    Après, certes les boutons ne sont pas très adaptés, mais plus simple à maitriser au début

  5. #5
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    Bonjour,

    pour avoir un bouton qui n'affiche que l'image, il faut faire les opérations suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    jBtn_monBouton = new JButton( new CActionBouton()); // Si vous voulez affecter une action au bouton
    jBtn_monBouton.setIcon( new ImageIcon( getClass().getResource( "/Image.png" )));
    //jBtn_monBouton.setPressedIcon( new ImageIcon( getClass().getResource( "/Image press.png" )));
    //jBtn_monBouton.setRolloverIcon( new ImageIcon( getClass().getResource( "/Image actif.png" )));
    jBtn_monBouton.setFocusPainted( false );
    jBtn_monBouton.setBorderPainted(false);
    jBtn_monBouton.setOpaque( false );
    jBtn_monBouton.setContentAreaFilled(false);

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Merci de votre réponse.
    J'ai ajouter ceci à mon code, mais rien à faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bouton3.setFocusPainted( false );
    bouton3.setBorderPainted(false);
    bouton3.setOpaque( false );
    bouton3.setContentAreaFilled(false);
    donc j'ai tout remodifier le code. Les marges ce sont réduites.
    En revanche, le pgm dois faire évoluer des jetons sur un damier, ceux-ci suivent une trajectoire jusqu’à rencontrer un bord.
    Or dans le code suivant, les anciennes position des jetons sont conservés.
    Comment faire pour réinitialiser le damier ???

    Voici le code:

    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
    public class interface2 extends Damier {
     
        static JButton bouton3;
        static int largeur,longeur;
        static int taille=4;
     // Constructeur
     
        interface2(){
     
                    super(); // constructeur super classe
                    this.largeur= NB_CASES_LARG+2;
                    this.longeur= NB_CASES_HAUT+2;
     
            JFrame fen=new JFrame();
            fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            fen.setSize(800, 800);
            fen.setTitle("Jetons fous");
            fen.setLocationRelativeTo(null);
     
     
                    JButton [][]tab=new JButton[largeur][longeur]; 
     
                    JPanel p1 = new JPanel(); 
     
    		p1.setLayout(new GridLayout(largeur,longeur)); // création d'une grille dans laquelle on placera des JButton
    		Container cont = fen.getContentPane();
     
                    Insets emptyInsets = new Insets(0,0,0,0);
     
    		for(int i=0;i<=(largeur-1);i++){ 
    		for(int j=0;j<=(longeur-1);j++){ 
     
                    tab[i][j]=new JButton(); 
    		p1.add(tab[i][j]); // On place le panel contenu dans tab[i][j] dans le panel p1.
    		// Tous les panels du tableau tab seront de même taille grace au GridLayout
    		tab[i][j].setPreferredSize(new Dimension(taille,taille));
    		} 
                    }
     
     
    		// On test chaque position des jetons, des bombes et obstacles pour les afficher
    		do{
     
                    evolution();
     
                    for(int i=0; i<(largeur);i++){
    		for(int j=0; j<(longeur);j++){ 
     
                        // Affiche des couleurs selon la paritée des cases
                         if(((i+j)%2)==0 && i!=0 && j!=0 && i!=largeur-1 && j!=longeur-1 && i!=0 && i !=largeur && j!=0 && j!=longeur )
    				tab[i][j].setBackground(Color.pink);
                         else if (i!=0 && j!=0 && i!=largeur-1 && j!=longeur-1 && i!=0 && i !=largeur && j!=0 && j!=longeur)
    				tab[i][j].setBackground(Color.red);
     
     
     
                        else{ if (isJeton(i, j)){
                                    bouton3 =   new JButton (new ImageIcon(getClass().getClassLoader().getResource("image/pion1.png")));
    				bouton3.setMargin(emptyInsets);
    				bouton3.setBorder(null);
    				tab[i][j].add(bouton3, p1);
    				}}}}
     
                    }while(nbJeton>1);
                    }
     
         public static void main(String [] args){
                    interface1 i= new interface1();
    	}
    }
    Mon prof ma parler de repaint, mais je ne sais pas ce que cela est

  7. #7
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    Bonjour,

    le problème est-il résolu pour l'apparence des boutons ?

    En ce qui concerne la seconde question, si p1 est le JPanel contenant les boutons, vous pouvez demander à ce qu'il soit redessiné lorsque la situation a changé par une instruction du genre p1.repaint().
    Il en existe d'autre, pour cela, voyez la documentation : http://docs.oracle.com/javase/6/docs...awt.Rectangle)

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Bonjour, le premier problème n'a été que partiellement réglé. Les marges ont diminuées, mais sont toujours présentent.
    Et en ce qui concerne mon problème majeur, je vient d'ajouter : p1.repaint();
    à l'intérieur de mes deux for, mais le problème est toujours le même

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Déterrage de topic..., mais comme j'ai eu le même problème et que j'ai trouvé la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     button.setMargin(new Insets(1,1,1,1));

  10. #10
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Par défaut
    histoire de déterrer le topic encore plus, j'ai eu ce problème et la solution trouvée ne marche pas, j'ai résolu le problème en ajoutant la ligne :

    button.setBorderPainted(false);

    En espérant aider les prochaines personnes qui aurons ce problème ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Marge minimale (visuellement) de JButton ?
    Par temparm dans le forum Composants
    Réponses: 1
    Dernier message: 23/01/2013, 12h21
  2. enlever une Action associée à un JButton
    Par tanguy.L dans le forum Composants
    Réponses: 3
    Dernier message: 05/05/2008, 10h41
  3. Comment enlever complètement les marges d'un TabControl
    Par stephane.julien dans le forum C#
    Réponses: 8
    Dernier message: 18/01/2008, 09h52
  4. enlever animations JButton
    Par barbiche dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 23/03/2007, 15h09
  5. [html] enlever la marge a gauche d'un popup
    Par xenhook dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 05/08/2005, 22h48

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