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 :

JLayeredPane et setTransform, comportement étrange


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut JLayeredPane et setTransform, comportement étrange
    Bonjour.

    Je dessine dans un JPanel et j'aimerais pouvoir faire passer des JInternalFrame par dessus ce dessin. Mais il semblerait que Graphics2D setTransform pose des soucis. Lorsque j'assigne une AffineTransform j'ai des trainées lorsque je déplace la JInternalFrame par dessus le JPanel.

    Voici le code qui expose le problème :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    import javax.swing.*;
     
    import java.awt.*;
    import java.awt.geom.AffineTransform;
     
    public class RootLayeredPaneDemo extends JPanel
    {
        public RootLayeredPaneDemo(JLayeredPane layeredPane)
        {
     
            JInternalFrame dummyTest = new JInternalFrame();
            dummyTest.setSize(100, 100);
            dummyTest.setLocation(120, 100);
            dummyTest.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
            dummyTest.setVisible(true);
     
            layeredPane.add(dummyTest, 1);
     
            IMGPanel panel = new IMGPanel(false);
            panel.setSize(100, 100);
            panel.setLocation(0, 0);
            layeredPane.add(panel, 0);
     
            IMGPanel panel2 = new IMGPanel(true);
            panel2.setSize(100, 100);
            panel2.setLocation(150, 0);
            layeredPane.add(panel2, 0);
     
        }
     
        private class IMGPanel extends JPanel
        {
            boolean at;
     
            public IMGPanel(boolean at)
            {
                this.at = at;
            }
     
            @Override
            public void paintComponent(Graphics graphics)
            {
                Graphics2D g = (Graphics2D) graphics;
                g.setColor(Color.red);
                g.clearRect(0, 0, getWidth(), getHeight());
                if (at)
                    g.setTransform(new AffineTransform());
                g.drawLine(0, getHeight()/2, getWidth(), getHeight()/2);
                g.drawLine(getWidth()/2, 0, getWidth()/2, getHeight());
            }
        }
     
        private static void createAndShowGUI()
        {
            //Create and set up the window.
            JFrame frame = new JFrame("RootLayeredPaneDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            //Create and set up the content pane.
            RootLayeredPaneDemo newContentPane = new RootLayeredPaneDemo(
                    frame.getLayeredPane());
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
     
            //Display the window.
            frame.setSize(new Dimension(300, 350));
            frame.setVisible(true);
        }
     
        public static void main(String[] args)
        {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });
        }
    }
    Si on passe l'interalFrame sur le panel à gauche tout baigne mais sur celui de droite ça fait des trainées.


    Merci d'avance.

  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
    ajoute un appel à super.paintComponent(g) au début de ton paintComponent

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par sinok Voir le message
    ajoute un appel à super.paintComponent(g) au début de ton paintComponent
    Aucun effet.

    Ça marche chez toi en faisant ça ?

  4. #4
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut.
    d'aprés mes infos, JDesktopPane est le seul conteneur fait pour gérer les JInternalFrame

  5. #5
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par slim_java Voir le message
    salut.
    d'aprés mes infos, JDesktopPane est le seul conteneur fait pour gérer les JInternalFrame
    J'étais pas sceptique et malheureusement j'avais raison de l'être, ça ne change rien.

    Voici le code que j'ai fait pour tester :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    import javax.swing.*;
     
    import java.awt.*;
    import java.awt.geom.AffineTransform;
     
    public class JDPaneTest extends JPanel
    {
        boolean at;
     
        public JDPaneTest(boolean at)
        {
            this.at = at;
        }
     
        @Override
        public void paintComponent(Graphics graphics)
        {
            Graphics2D g = (Graphics2D) graphics;
            g.setColor(Color.red);
            g.clearRect(0, 0, getWidth(), getHeight());
            if (at)
                g.setTransform(new AffineTransform());
            g.drawLine(0, getHeight() / 2, getWidth(), getHeight() / 2);
            g.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight());
        }
     
        private static void createAndShowGUI()
        {
            //Create and set up the window.
            JFrame frame = new JFrame("RootLayeredPaneDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            //Create and set up the content pane.
            JDesktopPane jdp = new JDesktopPane();
     
            //panels
            JDPaneTest panel = new JDPaneTest(false);
            panel.setSize(100, 100);
            panel.setLocation(0, 0);
     
            JDPaneTest panel2 = new JDPaneTest(true);
            panel2.setSize(100, 100);
            panel2.setLocation(150, 0);
     
            jdp.add(panel, -1);
            jdp.add(panel2, -1);
     
     
            //internal frame
            JInternalFrame dummyTest = new JInternalFrame();
            dummyTest.setSize(100, 100);
            dummyTest.setLocation(120, 100);
            dummyTest.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
            dummyTest.setVisible(true);
     
            jdp.add(dummyTest, 0);
     
            jdp.setBackground(Color.gray);
     
            frame.setContentPane(jdp);
     
            //Display the window.
            frame.setSize(new Dimension(300, 350));
            frame.setVisible(true);
     
     
        }
     
        public static void main(String[] args)
        {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });
     
        }
    }

  6. #6
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut.
    je comprends pas ces deux lignes !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     if (at)      
              g.setTransform(new AffineTransform());

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Forms6i] Un IF-ELSIF au comportement étrange
    Par lafouine dans le forum Forms
    Réponses: 11
    Dernier message: 13/09/2005, 15h40
  2. Comportement étrange apres une désinstallation
    Par Sunchaser dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2005, 19h44
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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