IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Comment dessiner un composant SWING dans le paint d'un autre composant.


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut Comment dessiner un composant SWING dans le paint d'un autre composant.
    Hello.

    Tout est dans le titre mais je vais essayer d'être un peu plus clair.

    J'ai créé un composant perso et dans sa méthode paint() je voudrais dessiner un autre composant SWING.

    En bidouillant un petit peu (en rendant la méthode paintComponant() publique) j'arrive à dessiner un JLabel. Par contre je n'arrive pas à dessiner un JScrollPane avec sa vue, même si j'appelle la méthode paintChildren().

    Si quelqu'un a une petite idée, je l'en remercie par avance.

    Bye.

    Nuwanda

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    tu peux modifier un JPanel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void paintComponent(Graphics g){
     
    //la je redessine comme je veux
     
    //puis je dessine les fils
    paintChildren();
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    Il semble que ce soit ce que j'ai fait mais cela ne fonctionne pas.

    Mon composant principal gère un ensemble d'objets de type Element, cette interface définit la méthode drawElement(Graphics g) qui est appelée dans le paint() de mon composant principal. De la sorte tous les Element qui font parti de mon composant principal sont dessinés.

    Voici un bout de code de ce que j'essaye de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class MyElement implements Element {
    	private JScrollPane2 scroll;
     
    	public MyElement() {
    		this.scroll = new JScrollPane2(new JLabel("test"));
    		this.scroll.setSize(300,300);
    	}
     
    	public void drawElement(Graphics g) {
    		this.scroll.superPaint(g);
    	}
     
    	private static class JScrollPane2 extends JScrollPane {
    		public JScrollPane2(Component view) {
    			super(view);
    		}
     
    		public void superPaint(Graphics g) {
    			super.paintComponent(g);
    			super.paintChildren(g);
    		}
    	}
    }
    Donc cela n'affiche pas le JLabel, j'ai vaguement un carré de fond gris, mais c'est tout.

    ... et ce n'est que le proto..

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    et si t'essaye de faire ta classe1 extends la classe2
    ou la classe 2 definit ton premier composant

    donc tu créera ainsi ton objet classe 2 tout en créant un autre objet swing dans la methode paint

    ce qui en gros te ramene a deux methode paint mais je ne sait pas ce que cela peut donner

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Je ne vois pas trop ce que tu veux faire, mais voici toujours quelque chose qui marchera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class ZoomOutPanel extends JPanel {
      JComponent target;
     
      ...
     
      public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
     
        // on laisse une bordure
        g2.translate(50, 50);
        // on applique le zoom
        g2.scale(0.5, 0.5);
     
        // on dessine le composant 'target' avec un
        // décalage de 50 pixels et un zoom de 1/2
        target.paint(g2);
     
        // on annule le zoom et le décalage
        g2.scale(2, 2);
        g2.translate(-50, -50);
     
        // on dessine autre chose
        g2.setColor(Color.RED);
        g2.fillRect(0, 0, 50, getHeight());
      }
    }

Discussions similaires

  1. Bogue avec un composant Swing dans une scene javaFX
    Par Stefounette dans le forum JavaFX
    Réponses: 0
    Dernier message: 06/05/2010, 15h38
  2. Composants Swing dans un graphics2D
    Par metalm77 dans le forum 2D
    Réponses: 3
    Dernier message: 21/10/2009, 20h29
  3. Composant Swing dans un programme openGL
    Par Talstus dans le forum 3D
    Réponses: 5
    Dernier message: 05/07/2007, 12h07
  4. Probleme d'ajout d'un composants swing dans un Graphics2D
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 23/04/2007, 22h10
  5. [JTable] Mettre un composant Swing dans une cellule
    Par NeptuS dans le forum Composants
    Réponses: 4
    Dernier message: 09/09/2005, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo