Tom's Guide > Forum > Programmation > [java]JRadioButton transparent ,mais mauvaise apparence!!

[java]JRadioButton transparent ,mais mauvaise apparence!!

Forum Programmation : [java]JRadioButton transparent ,mais mauvaise apparence!!

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour a tous;
j'utilise un JPanel transparent contenant des JRadioButton transparents avec

Bouton.setOpaque(true);
Bouton.setBackGround(new Color(0,0,0,0));

mais lorsque je fait passer le curseur par le bouton ce dernier change d'apparence :ouch:

que dois-je faire svp?? :(
merci d'avance
:bounce:


Message édité par zita330 le 16-08-2007 à 19:17:00
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Il me semble que le setOpaque() sert juste à optimiser l'affichage (pour ne pas redessiner le tout).
Donc, quand tu passe le curseur devant, seule la zone du curseur est redessinée.
Si tu veux gérer la transparence, je pense que tu dois redéfinir les méthodes paint() de tes widgets.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

desolé je suis débutante en java
c'est quoi "redéfinir les méthodes paint() de tes widgets."

en plus j'ai pas utilisé des methodes "paint"
le probleme reste avec le JRadioButton et les Checkbox :(

Répondre à zita330

l'affichage des widgets se fait toujours dans une méthode paint du widget.
Si tu crées une classe qui hérite de JButton, tu peux redéfinir la méthode paint() et ainsi remplacer totalement l'affichage du widget.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

CRicky a écrit :

l'affichage des widgets se fait toujours dans une méthode paint du widget.
Si tu crées une classe qui hérite de JButton, tu peux redéfinir la méthode paint() et ainsi remplacer totalement l'affichage du widget.


voilà un exemple qui ressemble un peut a mon probleme:
juste pour montrer comment les JRadioButton changent




import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


/*
* RadioButtonDemo.java requires these files:
* images/Bird.gif
* images/Cat.gif
* images/Dog.gif
* images/Rabbit.gif
* images/Pig.gif
*/
public class RadioButtonDemo extends JPanel implements ActionListener {
static String birdString = "Bird";
static String catString = "Cat";
static String dogString = "Dog";
static String rabbitString = "Rabbit";
static String pigString = "Pig";

JLabel picture;

public RadioButtonDemo() {
super(new BorderLayout());

//Create the radio buttons.
JRadioButton birdButton = new JRadioButton(birdString);
birdButton.setMnemonic(KeyEvent.VK_B);
birdButton.setActionCommand(birdString);
birdButton.setSelected(true);
birdButton.setBackground(new Color(0,0,0,0));

JRadioButton catButton = new JRadioButton(catString);
catButton.setMnemonic(KeyEvent.VK_C);
catButton.setActionCommand(catString);

JRadioButton dogButton = new JRadioButton(dogString);
dogButton.setMnemonic(KeyEvent.VK_D);
dogButton.setActionCommand(dogString);
dogButton.setBackground(new Color(0,0,0,0));

JRadioButton rabbitButton = new JRadioButton(rabbitString);
rabbitButton.setMnemonic(KeyEvent.VK_R);
rabbitButton.setActionCommand(rabbitString);

Checkbox pigButton = new Checkbox(pigString);
pigButton.setBackground(new Color(0,0,0,0));

//Group the radio buttons.
ButtonGroup group = new ButtonGroup();
group.add(birdButton);
group.add(catButton);
group.add(dogButton);
group.add(rabbitButton);
//group.add(pigButton);

//Register a listener for the radio buttons.
birdButton.addActionListener(this);
catButton.addActionListener(this);
dogButton.addActionListener(this);
rabbitButton.addActionListener(this);
// pigButton.addActionListener(this);

//Set up the picture label.
picture = new JLabel(createImageIcon(birdString+ ".gif" ));

//The preferred size is hard-coded to be the width of the
//widest image and the height of the tallest image.
//A real program would compute this.
picture.setPreferredSize(new Dimension(177, 122));


//Put the radio buttons in a column in a panel.
JPanel radioPanel = new JPanel(new GridLayout(0, 1));
radioPanel.add(birdButton);
radioPanel.add(catButton);
radioPanel.add(dogButton);
radioPanel.add(rabbitButton);
radioPanel.add(pigButton);
radioPanel.setBackground(Color.CYAN);

add(radioPanel, BorderLayout.LINE_START);
add(picture, BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}

/** Listens to the radio buttons. */
public void actionPerformed(ActionEvent e) {
picture.setIcon(createImageIcon(e.getActionCommand()+ ".gif" ));
}

/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = RadioButtonDemo.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("RadioButtonDemo" );
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Create and set up the content pane.
JComponent newContentPane = new RadioButtonDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);

//Display the window.
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
merci :)

Répondre à zita330
Tom's Guide > Forum > Programmation > [java]JRadioButton transparent ,mais mauvaise apparence!!
Aller à :

Il y a 936 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens