2013-07-31 22 views
5

Ho impostato un JPanel come contentPane del mio JFrame.Impossibile impostare lo sfondo di JPanel nel mio programma Swing.

quando uso:

jPanel.setBackground(Color.WHITE); 

Il colore bianco non viene applicata.

Ma quando io uso:

jFrame.setBackground(Color.WHITE); 

Funziona ... Sono sorpreso da questo comportamento. Dovrebbe essere il contrario, non dovrebbe?

SSCCE:

Ecco uno SSCCE:

Main Class:

public class Main { 
    public static void main(String[] args) { 
     Window win = new Window(); 
    } 
} 

Window Classe:

import java.awt.Color; 
import javax.swing.JFrame; 

public class Window extends JFrame { 
    private Container mainContainer = new Container(); 

    public Window(){ 
     super(); 
     this.setTitle("My Paint"); 
     this.setSize(720, 576); 
     this.setLocationRelativeTo(null); 
     this.setResizable(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainContainer.setBackground(Color.WHITE); //Doesn't work whereas this.setBackground(Color.WHITE) works 
     this.setContentPane(mainContainer); 
     this.setVisible(true); 
    } 
} 

classe contenitore:

import java.awt.Graphics; 
import javax.swing.JPanel; 

public class Container extends JPanel { 
    public Container() { 
     super(); 
    } 
    public void paintComponent(Graphics g) { 
    } 
} 
+0

Qual è la dimensione del JPanel? Riempie completamente il riquadro del contenuto? – bas

+0

Per un aiuto migliore, pubblicare prima un [SSCCE] (http://sscce.org/) – Reimeus

+0

Non ho impostato la dimensione del mio jPanel. Ho pensato che quando lo hai impostato come ContentPane, era automaticamente della stessa dimensione del jFrame corrispondente. – MarAja

risposta

3

La ragione è molto semplice includere la seguente riga

super.paintComponent(g); 

quando si modifica paintComponent.

public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
    } 

Ora funziona perfettamente.

Si dovrebbe sempre farlo a meno che non si abbia una ragione molto specifica per farlo.

[PS: Cambiare il colore in rosso o qualcosa di più oscuro a notare la differenza come a volte diventa difficile distinguere tra JFrame 's colore grigio e il colore bianco DEFAULT]

+0

1+ per un buon consiglio. –

1

Con la mia testcode funziona il modo in cui ci si aspettava di lavorare:

public class Main { 

     public static void main(String[] args) { 

      JFrame f = new JFrame(); 
      f.setSize(new Dimension(400,400)); 
      f.setLocationRelativeTo(null); 

      JPanel p = new JPanel(); 
      p.setSize(new Dimension(20,20)); 
      p.setLocation(20, 20); 

      //comment these lines out as you wish. none, both, one or the other 
      p.setBackground(Color.WHITE); 
      f.setBackground(Color.BLUE); 

      f.setContentPane(p); 

      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setVisible(true); 

     } 
     } 
+0

L'utente stava chiedendo un problema nel suo codice specifico, non in un metodo/codice di lavoro. Comunque, lei ha messo un'alternativa. Bene. –

Problemi correlati