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 :

[swing] Problème de superposition


Sujet :

2D Java

  1. #21
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Ah tu veux melanger opacite et transparence au niveau de la fenetre ? Je crains que ne soit pas possible de faire les deux car la transparence de la fenetre s'applique en totalite sur son contenu et vient donc se multiplier a la transparence de chacun des composants qu'elle contient.


    Par contre on peut faire cela :

    Fenetre non-decoree -> fenetre non-opaque -> panel 1 semi-transparent -> panel 2 opaque.

    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
     
    public class Main {
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    //JFrame.setDefaultLookAndFeelDecorated(true);
                    final JFrame frame = new JFrame("Test AWT Utilities");
                    JButton button = new JButton("Click me!");
                    button.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent event) {
                            frame.dispose();
                        }
                    });
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setUndecorated(true);
                    AWTUtilities.setWindowOpaque(frame, false);
                    JPanel panel = new JPanel();
                    panel.setBackground(new Color(255, 255, 255, 127));
                    panel.add(button);
                    frame.setLayout(new BorderLayout());
                    frame.add(panel, BorderLayout.CENTER);
                    frame.setSize(500, 500);
                    frame.setVisible(true);
                }
            });
        }
    }
    Et donc si tu n'as pas peur de recreer toutes les decorations de la fenetre...
    Sinon avec JFrame.setDefaultLookAndFeelDecorated(true), la fenetre (et toutes les autres) a une bordure metal opaque, avec les controles et le centre transparent. C'est moche mais bon...

    Petit bemol sur l'usage de setOpaque(false) avec la definition par defaut de paintComponent(), un JPanel ne fait pas un fillRect() de son background, ce qui le rend donc completement transparent, ce qui est donc genant...

    On a donc un probleme/conflit avec la definition d'opacite de Swing (je viens de reverifier dans Filthy Rich Clients p 27-28 voir aussi http://java.sun.com/products/jfc/tsc...ing/index.html) : dans Swing un composant est opaque quand il recouvre toute sa surface rectangulaire d'une couleur opaque ; et dans ce cas isOpaque() devrait etre a true. Si jamais il couvre toute sa surface rectangulaire d'une couleur transparente ou s'il ne couvre pas l'integralite de sa surface de dessin (ex: composant rond dont les coins sont completement transparent pour laisser passer la couleur du panel parent), isOpaque() doit retourner false. Et si ce n'est pas verifie, les optimisation de rendu de Swing peuvent faire que des aberrations apparaissent.

    Y a donc comme un probleme, il faudrait donc creer une classe MyPanel qui surchage paintComponent() et faire un fillRect() dans tous les cas plutot que d'appeler super.paintComponent(). C'est probablement ce que doit deja faire le JXPanel de SwingX.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par bouye Voir le message
    Ah tu veux melanger opacite et transparence au niveau de la fenetre ? Je crains que ne soit pas possible de faire les deux car la transparence de la fenetre s'applique en totalite sur son contenu et vient donc se multiplier a la transparence de chacun des composants qu'elle contient.
    vous avez raison....attendons alors la JDK7 peut être il aura d'autre nouveautés au sujet et pourquoi pas une solution à ce problème

Discussions similaires

  1. Swing et GLCanvas problème de superposition
    Par Clilmbatize dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/05/2007, 09h29
  2. Problème de superposition de fenetre
    Par Raton dans le forum MFC
    Réponses: 14
    Dernier message: 28/07/2005, 20h57
  3. [Swing] Problème avec un bean et un arraylist
    Par kikoufr dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 30/09/2004, 09h08
  4. [Swing] problème d'affichage
    Par l'obstiné dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/08/2004, 18h05
  5. [SWING] Problème de rafraichissement
    Par david71 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/05/2004, 15h38

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