Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1115 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Composants premier plan et PaintComponent en arrière plan

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Composants premier plan et PaintComponent en arrière plan

n°1925365
ptibidi
Posté le 20-09-2009 à 18:28:07  profilanswer
 

J'ai une classe héritée de JPanel. J'y intègre 16*16 boutons(c'est un démineur) et j'aimerais les faire disparaître quand je clique dessus pour faire apparaitre le texte que j'ai mis en dessous avec un g.drawString(...),ou une image de mine g.drawImage(...): donc setVisible(false) .
 
Mais le paintComponent s'affiche en premier plan donc je vois déjà le texte ou l'image et faire disparaitre les boutons ne sert a rien.
J'ai mis des setOpaque() et des setVisible() de partout sa ne change rien.
 
Je sais que ce problème a déjà été posé de nombreuses fois mais je n'y ai jamais trouvé de réponse.Merci d'avance.

mood
Publicité
Posté le 20-09-2009 à 18:28:07  profilanswer
 

n°1925572
liouan
Posté le 21-09-2009 à 15:32:05  profilanswer
 

plutot que de mettre un bouton, tu ne pourrais pas simplement mettre une image de bouton?
 
De cette sorte, un clic sur le faux bouton se resumerait a un changement d'image.
 
Je sais bien que du point de vue IHM, c'est pas top, mais dans une vraie IHM, il est rare que les boutons disparaissent quand on clique dessus...

n°1926220
ptibidi
Posté le 23-09-2009 à 18:35:14  profilanswer
 

Comment savoir à quel endroit on a cliqué si c'est pas un bouton ?

n°1926225
cbeyls
Hail to the King, Baby
Posté le 23-09-2009 à 19:21:19  profilanswer
 

éventuellement tu overrides les méthodes paint() et update() du bouton. Quand le bouton est là tu appelles l'implémentation normale via super() et quand le bouton doit disparaître du mets ton propre code qui dessine une image dans la zone.
 
C'est juste une idée, peut-être pas la meilleure qui soit :)

n°1926290
cbeyls
Hail to the King, Baby
Posté le 24-09-2009 à 01:54:49  profilanswer
 

J'ai écrit le code suivant pour vérifier ma théorie et cela semble bien fonctionner:
 

Code :
  1. import java.awt.Font;
  2. import java.awt.Graphics;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.JButton;
  6. import javax.swing.JFrame;
  7. import javax.swing.UIManager;
  8.  
  9.  
  10. public class DemineurTest extends JFrame {
  11.  
  12.     private static final long serialVersionUID = 1L;
  13.  
  14.     private boolean clicked = false;
  15.  
  16.     public DemineurTest() {
  17.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  18.         setSize(200, 100);
  19.         final JButton bouton = new JButton("Hello World" ) {
  20.  
  21.             private static final long serialVersionUID = 1L;
  22.  
  23.             @Override
  24.             public void paint(Graphics g) {
  25.                 if (clicked) {
  26.                     g.clearRect(0, 0, getWidth(), getHeight());
  27.                     g.setFont(new Font("Arial", Font.BOLD, 20));
  28.                     g.drawString("BOOM", 5, 20);
  29.                 } else {
  30.                     super.paint(g);
  31.                 }
  32.             }
  33.             @Override
  34.             public void update(Graphics g) {
  35.                 if (clicked) {
  36.                     paint(g);
  37.                 } else {
  38.                     super.update(g);
  39.                 }
  40.             }
  41.         };
  42.         bouton.addActionListener(new ActionListener() {
  43.             @Override
  44.             public void actionPerformed(ActionEvent arg0) {
  45.                 clicked = true;
  46.                 bouton.repaint();
  47.             }
  48.         });
  49.         getContentPane().add(bouton);
  50.     }
  51.  
  52.  
  53.     public static void main(String[] args) {
  54.         try {
  55.             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  56.         } catch (Exception e) {}
  57.         new DemineurTest().setVisible(true);
  58.     }
  59.  
  60. }


Message édité par cbeyls le 24-09-2009 à 01:58:32
n°1926913
ptibidi
Posté le 26-09-2009 à 12:14:25  profilanswer
 

J'ai trouvé pourquoi les boutons se mettaient en arrière plan:
J'ai crée une classe bouton héritée de JButton. Le fait d'utiliser la méthode paintComponent() ou paint() met les boutons en arrière plan.
Donc comment mettre une image sur les boutons sans ces méthodes ?
 
 

n°1926917
ptibidi
Posté le 26-09-2009 à 12:29:46  profilanswer
 

C'est bon j'ai trouvé la solution à tout mes problèmes:
le bouton se met en premier plan quand il a une image donc de base je lui met une image blanche, quand on fait un clique droit image de drapeau et quand on fait clique gauche setVisible(false)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Composants premier plan et PaintComponent en arrière plan

 

Sujets relatifs
savoir si une fenêtre est au 1er planPlacer un format png/gif en premier plan
VBA Premier programme assez coriaceVideo au premier plan
[Resolu][Asp.NET][C#] Composants COM et serveur IISapplet en arriere plan
Update mysql / php sur le premier enregistrement 
Plus de sujets relatifs à : Composants premier plan et PaintComponent en arrière plan


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR