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

2D Java Discussion :

Composants Swing dans un graphics2D


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 15
    Par défaut Composants Swing dans un graphics2D
    Bonjour,

    Je n'ai pas trouvé la solution sur google, alors je viens chercher de l'aide ici pour mon problème...

    Est-il possible de dessiner des composants Swing sur une surface Graphics2D ?

    Si non, est-il possible par un autre moyen de superposer un Graphic2D et une autre surface (par exemple, un Jpanel) pour afficher mes composants Swing ?

    Merci !

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en fait un Graphics2D n'est en aucun cas un composant. Donc il est nullement possible de le superposer à quoi que ce soit. Les classes Graphics2D et Graphics correspondent au contexte graphique d'un composant donné à un instant t, point barre.

    Je suppose que ton problème vient du fait que dans le composant que tu redéfinis pour faire du dessin dessus, tu as redéfini la méthode paint au lieu de la méthode paintComponent. La méthode paintComponent est responsable du dessin du composant en lui même alors que la méthode paint a beaucoup plus de responsabilités. En particulier le fait de déclencher le dessin des composants fils (c'est à dire ceux qui ont été ajoutés).

    Une fois la méthode paintComponent redéfinie tu pourras sans problème ajouter des composants à ton composant customisé et ceux ci apparaitront sans le moindre problème.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    Cela est possible, il faut que tu obtienne un Graphics2D, tu peut l'obtenir à partir d'une BufferedImage avec la méthode createGraphics(). Cela fait tu passe ce Graphics2D ( sous type de Graphics ) à la méthode paint(Graphics g), et tu dessine ton composant graphique.

  4. #4
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    L'exemple suivant montre la différence entre les deux solutions proposées (un JButton réel et un JButton dessiné). A mon avis c'est préférable d'avoir des composants réels, sinon il n'y pas d'interaction possible:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import java.awt.*;
    import javax.swing.*;
    public class PaintDemo extends JFrame {
        private final DrawingPanel drawingPanel;
        public PaintDemo() {
            super("PaintDemo");
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(400, 300);
            setLocationRelativeTo(null);
            drawingPanel = new DrawingPanel();
            add(drawingPanel);
        }
        public static void main(final String[] args) {
            Runnable gui = new Runnable() {
                public void run() {
                    new PaintDemo().setVisible(true);
                }
            };
            //GUI must start on EventDispatchThread:
            SwingUtilities.invokeLater(gui);
        }
    }
    class DrawingPanel extends JComponent {
        private final JButton paintedButton;
        private final JButton realButton;
        public DrawingPanel() {
            paintedButton = new JButton("Painted JButton");
            realButton = new JButton("Real JButton");
            JDialog jDialog = new JDialog();
            jDialog.setLayout(new FlowLayout());
            jDialog.add(paintedButton);
            jDialog.pack();
            setLayout(new GridBagLayout());
            add(realButton);
        }
        @Override
        protected void paintComponent(final Graphics g) {
            super.paintComponent(g);
            g.drawOval(100, 100, 100, 100);
            paintedButton.paint(g);
        }
    }

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. Composant Swing dans un programme openGL
    Par Talstus dans le forum 3D
    Réponses: 5
    Dernier message: 05/07/2007, 12h07
  3. Réponses: 4
    Dernier message: 20/06/2007, 12h15
  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