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

AWT/Swing Java Discussion :

apparence d'un jradiobutton


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 50
    Points : 46
    Points
    46
    Par défaut apparence d'un jradiobutton
    Bonjour,
    Je cherche à donner à mon JRadioButton l'apparence d'un bouton.
    J'ai en gros réussi, juste j'ai toujours le rond qui me dit s'il est cliqué ou pas. Comment qu'on l'enlève ??
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JRadioButton cg = new JRadioButton(Textes.GLOBAL_cg());
            cg.setBorderPainted(true);
            cg.setMargin(new Insets(5,5,5,5));
            cg.setFocusPainted(false);

    Merci de votre aide

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Un JRadioButton a une fonction : il permet dans un groupe de plusieurs boutons d'avoir une sélection alternative. On peut changer son apparence (avoir une icône particulière lorsqu'il est sélectionné; mais on ne change pas sa fonction, surtout que ça va être déroutant pour l'utilisateur. Toutes ces bidouilles sur l'apparence peuvent aussi donner des résultats foireux en fonction du look and feel.

    On peut donner l'apparence de bouton pour une sélection alternative en utilisant le composant d'UI dont c'est la fonction : le JToggleButton.

    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
    public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel(new GridBagLayout());
     
    		JToggleButton button1 = new JToggleButton("a");
    		JToggleButton button2 = new JToggleButton("b");
    		JToggleButton button3 = new JToggleButton("c");
     
    		ButtonGroup group = new ButtonGroup();
    		group.add(button1);
    		group.add(button2);
    		group.add(button3);
    		button1.setSelected(true);
     
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.gridx=0;
    		gbc.gridy=GridBagConstraints.RELATIVE;
    		gbc.insets=new Insets(5, 5, 5, 5);
    		panel.add(button1,gbc);
    		panel.add(button2,gbc);
    		panel.add(button3,gbc);
     
    		frame.add(panel);
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
    On peut obtenir un résultat similaire à ce qu'on aurait avec des radios boutons, par exemple des boutons carrés :

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    public class SquareRadioButtons {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel(new GridBagLayout());
     
    		SquareRadioButton button1 = new SquareRadioButton("a");
    		SquareRadioButton button2 = new SquareRadioButton("b");
    		SquareRadioButton button3 = new SquareRadioButton("c");
     
    		ButtonGroup group = new ButtonGroup();
    		group.add(button1);
    		group.add(button2);
    		group.add(button3);
    		button1.setSelected(true);
     
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.gridx=0;
    		gbc.gridy=GridBagConstraints.RELATIVE;
    		gbc.insets=new Insets(5, 5, 5, 5);
    		panel.add(button1,gbc);
    		panel.add(button2,gbc);
    		panel.add(button3,gbc);
    		button3.setEnabled(false);
     
    		frame.add(panel);
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	// implémentation partielle pour l'exemple
    	public static class SquareRadioButton extends AbstractButton {
     
    		private static final Icon ICON = createIcon();
     
    		private JToggleButton button=new JToggleButton();
    		private JLabel label = new JLabel();
    		public SquareRadioButton() {
    			setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
    			add(button);
    			add(label);
    			button.setIcon(ICON);
    			button.setMargin(new Insets(0, 0, 0, 0));
    		}
     
    		public SquareRadioButton(String text) {
    			this();
    			setText(text);
    		}
     
    		@Override
    		public void setText(String text) {
    			super.setText(text);
    			label.setText(text);
    		}
     
    		@Override
    		public void setEnabled(boolean b) {
    			button.setEnabled(b);
    		}
     
    		@Override
    		public boolean isEnabled() {
    			return button.isEnabled();
    		}
     
    		@Override
    		public boolean isSelected() {
    			return button.isSelected();
    		}
     
    		@Override
    		public void setSelected(boolean b) {
    			button.setSelected(b);
    		}
     
    		@Override
    		public ButtonModel getModel() {
    			return button.getModel();
    		}
     
    		private static Icon createIcon() {
    			BufferedImage image = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
    			return new ImageIcon(image);
    		}
     
    	}
     
    }
    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.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 50
    Points : 46
    Points
    46
    Par défaut
    J'ai pas compris toutes les subtilités mais en tous cas JToggleButton fait parfaitement l'affaire ! Merci beaucoup
    Juste une petite broutille : j'aimerais bien avoir un look personnalisé mais je trouve pas comment on fait pour personnaliser l'aspect du bouton cliqué. Comment qu'on fait ?
    Merci pour la réponse

  4. #4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Cela peut vouloir tout et n'importe quoi "personnaliser le bouton cliqué".

    1. On peut déjà simplement indiquer une image particulière pour le bouton sélectionné (donc celui qu'on clique).
      Nom : Capture.PNG
Affichages : 97
Taille : 3,8 Ko

      Pour faire ça j'ai ajouté dans le package le fichier Heart.png et j'ai modifié la classe :
      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
      public static class SquareRadioButton extends AbstractButton {
       
      		private static final Icon ICON = createIcon();
      		private static final Icon SELECTED_ICON = createSelectedIcon();
       
      		private JToggleButton button=new JToggleButton();
      		private JLabel label = new JLabel();
      		public SquareRadioButton() {
      			setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
      			add(button);
      			add(label);
      			button.setIcon(ICON);
      			button.setSelectedIcon(SELECTED_ICON); // indique l'icône qui s'affiche quand le bouton est sélectionné
      			button.setMargin(new Insets(0, 0, 0, 0));
      		}
       
      		public SquareRadioButton(String text) {
      			this();
      			setText(text);
      		}
       
      		@Override
      		public void setText(String text) {
      			super.setText(text);
      			label.setText(text);
      		}
       
      		@Override
      		public void setEnabled(boolean b) {
      			button.setEnabled(b);
      		}
       
      		@Override
      		public boolean isEnabled() {
      			return button.isEnabled();
      		}
       
      		@Override
      		public boolean isSelected() {
      			return button.isSelected();
      		}
       
      		@Override
      		public void setSelected(boolean b) {
      			button.setSelected(b);
      		}
       
      		@Override
      		public ButtonModel getModel() {
      			return button.getModel();
      		}
       
      		private static Icon createIcon() {
      			BufferedImage image = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
      			return new ImageIcon(image);
      		}
       
      		private static Icon createSelectedIcon() {
      			return new ImageIcon(SquareRadioButton.class.getResource("Heart.png"));
      		}
       
      	}
      Il y a d'autres attributs qu'on peut modifier, y compris d'autres icônes (voir la javadoc du JToggleButton pour connaître toutes les possibilités.
    2. On peut modifier l'apparence complète de l'UI avec un look and feel. Certains sont fournis dans le JDK, on en trouve d'autres sur le net.

      Par exemple, dans l'exemple que j'affiche ci-dessus, je suis passé à un look and feel système (donc Windows dans mon environnement) :

      en ajoutant tout au début de mon programme :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
          // ignore
      }
      On peut réaliser son propre look and feel, mais ça demande beaucoup de travail et il faut penser à tout, mais on peut tout faire, ou presque.
    3. On peut modifier certains aspects du look and feel en agissant sur les classes d'UI. BasicToggleButtonUI pour le toggle button.
    4. On peut aussi modifier certains aspects en redéfinissant certaines méthodes de redessin, pour dessiner directement dans le composant.
      Par exemple :
      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
      		private JToggleButton button=new JToggleButton() {
      			@Override
      			protected void paintBorder(Graphics g) {
      				if ( isSelected() ) {
      					Graphics2D g2d = (Graphics2D)g;
      				     float radius = getWidth()/2;
      					Point2D center = new Point2D.Float(radius, radius);
      				     float[] dist = {0.0f,0.8f};
      				     Color[] colors = {new Color(0,0,0,0), new Color(0,255,0,192)};
      					g2d.setPaint(new RadialGradientPaint(center, radius, dist, colors));
      					g.fillOval(0, 0, getWidth(), getHeight());
      				}
      				super.paintBorder(g);
      			}
      		};
    Images attachées Images attachées  
    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.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 50
    Points : 46
    Points
    46
    Par défaut
    Merci pour la réponse super complète !

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

Discussions similaires

  1. [JRadioButton] Afficher l'icône modifiée
    Par l'obstiné dans le forum Composants
    Réponses: 2
    Dernier message: 24/08/2004, 14h10
  2. Apparence du curseur
    Par lyrau dans le forum GLUT
    Réponses: 2
    Dernier message: 17/02/2004, 09h24
  3. problème d'incompatibilité apparement
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 17/09/2003, 14h51
  4. Réponses: 3
    Dernier message: 28/02/2003, 17h06
  5. Réponses: 1
    Dernier message: 03/02/2003, 23h18

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