2010-12-18 4 views
2

Je suis curieux de savoir pourquoi appeler setBackground (Color) sur un JLayeredPane ne semble pas réellement définir une couleur d'arrière-plan. Je suppose que cela a quelque chose à voir avec le JLayeredPane ayant un fond transparent pour une raison quelconque? Quoi qu'il en soit, voici un code qui montre le problème. C'est sur Mac, donc je crois qu'il utilise OSX LAF. Le résultat obtenu est indiqué par this image.Comment définir une couleur d'arrière-plan sur un JLayeredPane?

import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JLayeredPane; 
import javax.swing.JPanel; 

public class Main { 
    public static void main(String[] args) { 

     // This should be done with Swing Utilities, but I wanted to keep this 
     // simple... 
     JFrame foo = new JFrame(); 
     foo.setSize(new Dimension(500, 500)); 

     JLayeredPane bar = new JLayeredPane(); 
     bar.setPreferredSize(new Dimension(200, 200)); 
     bar.setBackground(Color.red); 

     // If you comment out the following line, you don't see any indication 
     // the JLayeredPane is actually being drawn to screen 
     bar.setBorder(BorderFactory.createLineBorder(Color.green)); 


     JPanel content = new JPanel(); 
     content.add(bar); 

     foo.setContentPane(content); 
     foo.setVisible(true); 
    } 
} 

Répondre

8

Vous pouvez essayer de faire le panneau opaque en couches:

bar.setOpaque(true); 
+0

Toute idée pourquoi il est défini comme faux par défaut? – Hamy

+0

Vous n'êtes pas sûr, le didacticiel Swing décrit un volet en couches comme "un conteneur Swing qui fournit une troisième dimension pour le positionnement". Donc je ne suis pas sûr que ce serait différent d'un JPanel qui fait un positionnement en deux dimensions. – camickr

Questions connexes