JPanel devant un JButton

Résolu
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005 - 18 mai 2005 à 11:15
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005 - 19 mai 2005 à 14:11
bonjour,

j'ai un gros problème.

j'ai un Jpanel et un JButton à l'intérieur d'une JFrame et je
souhaiterais masquer le JButton avec le JPanel mais sans rendre le
bouton invisible.

merci de votre aide

rmorvill

24 réponses

cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
19 mai 2005 à 13:37
Est-ce que ça ne peut pas se faire simplement en redéfinissant les
méthodes paint(Graphics g) dans tous les composants qui sont affichés ?



par exemple lorsque tu définis tes composants :



JButton monBouton1 = new JButton {

public void paint(Graphics g) {

super.paint(g);

if (MaClasse.FILTRER == true) {
//une variable statique qqpart pour indiquer si on filtre ou pas

g.setColor(new
Color(255, 0, 0, 150));//du rouge sang avec une composante alpha à 150
:p

g.fillRect(0, 0, this.getWidth(), this.getHeight());

}

}



};



JLabel monLabel = new JLabel() {

public void paint(Graphics g) {


super.paint(g);


if (MaClasse.FILTRER == true) {


g.setColor(new Color(255, 0, 0, 150));


g.fillRect(0, 0, this.getWidth(), this.getHeight());


}


}

};



je viens de faire un petit test en redéfinissant la méthode paint de
cette façon pour tous les composants graphiques de mon appli, et ça
semble bien fonctionner.



(désolé si il y a encore des problèmes d'espaces manquants dans mes messages, mais je ne sais pas d'où ça vient)


Dobel
[Une fois rien, c'est rien; deux fois rien,
ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà
s'acheter quelque chose, et pour pas cher]
3
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
18 mai 2005 à 11:38
Comment ca "masquer ton bouton par le jpanel"?

Si tu masque, le bouton sera invisible...

Alors pourquoi le voir?

Tu veux jouer sur la transparence?

-------------------
dams
-------------------
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
18 mai 2005 à 11:51
oui je veux jouer sur la transparence.

tu as tout compris!

je veux faire un filtre pour un mode de nuit.

mercide te pencher sur mon problême

rmorvill
0
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
18 mai 2005 à 11:52
si tu ve superposer des composants et en afficher un seul à la foi tu
pe utiliser un CardLayout, mais je suis pas sûr si j'ai compris ce ke
tu ve faire!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
18 mai 2005 à 11:53
dslé, je suis encore une fois en retard
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
18 mai 2005 à 13:12
Il faut juste que tu mette en fonf de ton JPanel une couleur possedant un alpha selon la transparence desiree...

-------------------
dams
-------------------
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
18 mai 2005 à 13:36
j'ai essayé de supperposé deux JPanel avec une couleur transparente
pour celui du dessus mais un autre pbm apparait: des labels changent
sur le panel du dessous et à ce moment la, le panel du dessus devient
transparent au dessus de ces labels. j'ai essayé de faire un repaint
après chaque changement sur les labels mais il y a un clignotement.

merci de ton aide

rmorvill
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
18 mai 2005 à 13:38
Utilises du double buffering pour eviter le clignotement...

-------------------
dams
-------------------
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
18 mai 2005 à 14:01
comment faire cela?

à la création, les JPanel sont doubleBuffered par défaut. y a t-il une opération particulière?

merci

rmorvill
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
18 mai 2005 à 14:04
Tiens en triple buffering voici un exemple, inspire toi de ca...

import java.awt.*;

import java.awt.image.*;



public class TrippleBufferingHardware

extends Frame {

// boucle d'affichage

RenderingThread renderingThread = new RenderingThread(); // variable permettant d'utiliser la mémoire VRAM

BufferStrategy strategy; // buffer mémoire où les images et les textes sont appliqués

Graphics buffer;

int x = 0; // coordonnée x de l'affichage du texte



public TrippleBufferingHardware() {

setSize(400, 400);

setVisible(true);

// inhibe la méthode courante d'affichage du composant

setIgnoreRepaint(true);

// on créé 3 buffers dans la VRAM donc c'est du double-buffering

createBufferStrategy(3);

// récupère les buffers graphiques dans la mémoire VRAM

strategy = getBufferStrategy();

buffer = strategy.getDrawGraphics();

renderingThread.start();

}



public void graphicalRender() {

buffer.setColor(Color.black);

buffer.fillRect(0, 0, 400, 400);

buffer.setColor(Color.white);

buffer.drawString("affichage d'une ligne de texte", x, 200);

x++;

if (x > 400) x = 0;

//on envoie toutes les données du buffer mémoire vers le buffer d'affichage

strategy.show();

}



class RenderingThread

extends Thread {

/** * Ce thread appelle le rafraichissement de notre fenêtre

* toutes les 10 milli-secondes */

public void run() {

while (true) {

try {

// on appelle notre propre méthode de rafraichissement

graphicalRender();

sleep(5);

}

catch (Exception e) {}

}

}

}



public static void main(String[] args) {

new TrippleBufferingHardware();

}

}

-------------------
dams
-------------------
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
18 mai 2005 à 14:45
j'ai vu cette source sur un autre site.

mais je n'arrive pas à la faire marcher.

j'ai un message d'erreur:

Exception in thread "main" java.lang.IllegalStateException: Component must have a valid peer



je ne comprend pas...

rmorvill
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
18 mai 2005 à 15:00
Comment ca tu n'arrives pas a la faire marcher?

Je viens de la retester, et ca fonctionne...
Envoie un bout de ton code que j'y jette un coup d'oeil.
-------------------
dams
-------------------
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
18 mai 2005 à 15:09
en fait je n'avait pas fait de setVisible(true) de ma JFrame. mais j'ai toujour le scintillement. meme en triple buffering...

as-tu une autre idée?

merci

rmorvill
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
18 mai 2005 à 15:15
en fait je pense que leprobleme vient de mafaçon de dessiner dans le buffer. comment dessiner mes JPanel dans celui-ci?

j'ai cherché dans les méthodes de la classe Graphics sans succès.

rmorvill
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
18 mai 2005 à 15:23
ca scintille toujours car tu dois encore appeler le repaint()

vire l'instruction, ce sera mieux...

Attends, si j'ai bien compris, ton panel est juste un filtre transparent de couleur?

Alors tu fais juste une classse qui herite de JPanel al amniere dans
l'exemple de la JFrame et en faisant un buffer.setColor(tacouleur)

ou est le pb...

-------------------
dams
-------------------
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
18 mai 2005 à 16:08
le probleme est que cette méthode ne marche pas avec un JPanel mais avec une Frame.

et lesframesont opaque meme si l'on met son background transparent

rmorvill
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
19 mai 2005 à 08:54
et si tu fais un setOpaque???

-------------------
dams
-------------------
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
19 mai 2005 à 10:51
setOpaque n'est pas une méthode de la classe JFrame..

rmorvill
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
19 mai 2005 à 11:11
attends, si je comprends bien tu mets une JFrame de couleur sur ta JFrame principale pour faire un filtre, c ca?

pourquoi tu ne met pas un JPanel flottant, qui lui pourra etre transparent?

-------------------
dams
-------------------
0
rmorvill Messages postés 17 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 19 mai 2005
19 mai 2005 à 11:24
si je met un JPanel flottant alors intervient le probleme de
scintillement et le double buffering ne peut s'appliquer qu'à la
fenetre entière et pas seulement au panel.

encore merci pour ton aide.

la résolution de ce problême est très importante pour mon projet.

peut-etre connais-tu quelqu'un d'autre du forum qui pourrais avoir une autre idée?

rmorvill
0
Rejoignez-nous