2010-04-05 4 views
4

Je veux simplement changer la taille (diamètre ) du (défaut) ImageIcon de mon JRadioButton. J'ai changé la taille de la police affichée dans le widget, donc c'est vraiment idiot avec un tel radiobutton.Changer la taille de ImageIcon dans un JRadioButton

JRadioButton button = new JRadioButton("Button"); 
button.setFont(new Font("Lucida Grande",Font.PLAIN, 11)); 

me donne ce bouton géant:

GIANT button!!

Dois-je vraiment créer ma propre ImageIcon? Ou puis-je modifier en quelque sorte le défaut, sans trop de tracas?

+0

Il est étonnant qu'à la fin SWING ne donne pas une réponse à ce problème facile. Tu as ma solidarité. –

Répondre

0

Compte tenu d'une ImageIcon, vous pouvez déduire une nouvelle instance réduite comme suit:

ImageIcon original = ...; 

    Image img = original.getImage(); 
    Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT)); 
    ImageIcon newInstance = new ImageIcon(scaledImage); 

Notez cependant que l'extension à plusieurs reprises une image dégrader la qualité.

+0

Je reçois une exception nullpointer lors de l'appel de getImage() de ImageIcon. Mon JRadioButton retourne une icône en appelant getIcon(), et non un ImageIcon, donc je le lance, ce qui pourrait avoir quelque chose à voir avec ça? EDIT: L'icône de mes JRadioButtons semble être nulle, pour une raison quelconque ... –

2

Si vous développez uniquement pour Mac Plate-forme (en fonction de votre écran-shot) Vous pouvez envisager d'utiliser les propriétés du client de pomme "mini"

component.putClientProperty("JComponent.sizeVariant", "mini"); 

comme indiqué sur ce lien:

http://developer.apple.com/mac/library/technotes/tn2007/tn2196.html#SIZE_EXAMPLES

+0

+1, bon indice. Cependant, cela devrait fonctionner sur toutes les plateformes. –

3

Aucune icône n'a été ajoutée à un JRadioButton. L'interface utilisateur ne fait que peindre les icônes au besoin, donc vous ne pouvez pas utiliser les méthodes getIcon ...() pour obtenir les icônes et l'échelle ensuite. Donc, comme un travail autour de vous devez d'abord créer votre propre image des icônes avant de les mettre à l'échelle.

Voici quelque chose pour vous aider à démarrer. La classe Screen Image facilite la création d'images d'un composant. Notez que vous devrez également créer des images pour les icônes "rollover". Cela peut être fait en définissant la méthode ButtonModel.setRollover (true) pour les états normal et sélectionné du bouton radio.

import java.awt.*; 
import java.awt.image.*; 
import javax.swing.*; 
import javax.swing.border.*; 

public class RadioButtonScale extends JFrame 
{ 
    private static void createAndShowGUI() 
    { 
     JPanel north = new JPanel(new FlowLayout(0, 0, FlowLayout.LEFT)); 

     JRadioButton button = new JRadioButton("Radio Button"); 
     north.add(button); 

     JPanel south = new JPanel(); 
     JLabel west = new JLabel(); 
     west.setBorder(new LineBorder(Color.GREEN)); 
     south.add(west, BorderLayout.WEST); 
     JLabel east = new JLabel(); 
     east.setBorder(new LineBorder(Color.GREEN)); 
     south.add(east, BorderLayout.EAST); 

     // Create images of radio button icon 

     Icon icon = UIManager.getIcon("RadioButton.icon"); 
     Dimension preferred = button.getPreferredSize(); 
     Insets insets = button.getInsets(); 
     int height = preferred.height - insets.top - insets.bottom; 
//  Rectangle r = new Rectangle(insets.left, insets.top, height, height); 
     Rectangle r = new Rectangle(insets.left, insets.top, icon.getIconWidth(), height); 

     west.setIcon(new ImageIcon(ScreenImage.createImage(button, r))); 
     button.setSelected(true); 
     east.setIcon(new ImageIcon(ScreenImage.createImage(button, r))); 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(north, BorderLayout.NORTH); 
     frame.add(south, BorderLayout.SOUTH); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
0

Je ne sais pas si je suis la question réelle mal, mais ... Pourquoi ne pas créer une image GIF pour le bouton radio ou agrandir l'actuel? Chargez-le avec ImageIcon g = new ImageIcon(NAME OF FILE). Ensuite, attribuez-le au bouton radio avec nameOfRadioButton.setIcon(g);

+0

On dirait que la question était de savoir comment le modifier par programme, pas comment le faire avec une image. – JNF

+0

parce que vous voulez utiliser l'icône que le LAF utilise, juste plus petit ;-) @jonsca ne voit pas une raison pour un upvote ... il ne répond tout simplement pas à la question ... – kleopatra

+0

@kleopatra N'a pas upvote, juste édité. – jonsca

Questions connexes