JPanel devant un JButton [Résolu]

rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 11:15 - Dernière réponse : rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention
- 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
Afficher la suite 

24 réponses

Répondre au sujet
cs_Dobel 333 Messages postés dimanche 25 mai 2003Date d'inscription 23 novembre 2009 Dernière intervention - 19 mai 2005 à 13:37
+3
Utile
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]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Dobel
dmaillet 500 Messages postés mercredi 20 août 2003Date d'inscription 11 juillet 2007 Dernière intervention - 18 mai 2005 à 11:38
0
Utile
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
-------------------
Commenter la réponse de dmaillet
rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 11:51
0
Utile
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
Commenter la réponse de rmorvill
safisoft 490 Messages postés vendredi 30 janvier 2004Date d'inscription 13 mai 2009 Dernière intervention - 18 mai 2005 à 11:52
0
Utile
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!
Commenter la réponse de safisoft
safisoft 490 Messages postés vendredi 30 janvier 2004Date d'inscription 13 mai 2009 Dernière intervention - 18 mai 2005 à 11:53
0
Utile
dslé, je suis encore une fois en retard
Commenter la réponse de safisoft
dmaillet 500 Messages postés mercredi 20 août 2003Date d'inscription 11 juillet 2007 Dernière intervention - 18 mai 2005 à 13:12
0
Utile
Il faut juste que tu mette en fonf de ton JPanel une couleur possedant un alpha selon la transparence desiree...

-------------------
dams
-------------------
Commenter la réponse de dmaillet
rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 13:36
0
Utile
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
Commenter la réponse de rmorvill
dmaillet 500 Messages postés mercredi 20 août 2003Date d'inscription 11 juillet 2007 Dernière intervention - 18 mai 2005 à 13:38
0
Utile
Utilises du double buffering pour eviter le clignotement...

-------------------
dams
-------------------
Commenter la réponse de dmaillet
rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 14:01
0
Utile
comment faire cela?

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

merci

rmorvill
Commenter la réponse de rmorvill
dmaillet 500 Messages postés mercredi 20 août 2003Date d'inscription 11 juillet 2007 Dernière intervention - 18 mai 2005 à 14:04
0
Utile
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
-------------------
Commenter la réponse de dmaillet
rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 14:45
0
Utile
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
Commenter la réponse de rmorvill
dmaillet 500 Messages postés mercredi 20 août 2003Date d'inscription 11 juillet 2007 Dernière intervention - 18 mai 2005 à 15:00
0
Utile
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
-------------------
Commenter la réponse de dmaillet
rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 15:09
0
Utile
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
Commenter la réponse de rmorvill
rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 15:15
0
Utile
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
Commenter la réponse de rmorvill
dmaillet 500 Messages postés mercredi 20 août 2003Date d'inscription 11 juillet 2007 Dernière intervention - 18 mai 2005 à 15:23
0
Utile
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
-------------------
Commenter la réponse de dmaillet
rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 16:08
0
Utile
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
Commenter la réponse de rmorvill
dmaillet 500 Messages postés mercredi 20 août 2003Date d'inscription 11 juillet 2007 Dernière intervention - 19 mai 2005 à 08:54
0
Utile
et si tu fais un setOpaque???

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

rmorvill
Commenter la réponse de rmorvill
dmaillet 500 Messages postés mercredi 20 août 2003Date d'inscription 11 juillet 2007 Dernière intervention - 19 mai 2005 à 11:11
0
Utile
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
-------------------
Commenter la réponse de dmaillet
rmorvill 17 Messages postés vendredi 18 février 2005Date d'inscription 19 mai 2005 Dernière intervention - 19 mai 2005 à 11:24
0
Utile
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
Commenter la réponse de rmorvill

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

JPanel devant un JButton - page 2