2013-07-31 10 views
5

Ustawiam JPanel jako contentPane mojego JFrame.Nie można ustawić tła JPanel w moim programie Swing.

Gdy używam:

jPanel.setBackground(Color.WHITE); 

biały kolor nie jest stosowana.

Ale kiedy używać:

jFrame.setBackground(Color.WHITE); 

To działa ... Jestem zaskoczony tym zachowaniem. Powinno być odwrotnie, prawda?

SSCCE:

Oto SSCCE:

główne klasy:

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

Okno Klasa:

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); 
    } 
} 

Pojemnik Klasa:

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

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

co jest rozmiar JPanel? Czy całkowicie wypełnia panel zawartości? – bas

+0

Aby uzyskać lepszą pomoc, wcześniej opublikuj [SSCCE] (http://sscce.org/) – Reimeus

+0

Nie ustawiłem rozmiaru mojego jPanel. Pomyślałem, że gdy ustawisz go jako contentPane, był automatycznie taki sam rozmiar jak odpowiadająca mu ramka jFrame. – MarAja

Odpowiedz

3

Powód jest bardzo prosty zawierać następującą linię

super.paintComponent(g); 

gdy zastępują paintComponent.

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

Teraz działa idealnie.

Powinieneś zawsze robić to, chyba że masz do tego konkretny powód.

[PS: Zmień kolor na czerwony lub coś ciemniejszego, aby zauważyć różnicę, jak czasami trudno jest rozróżnić JFrame „s domyślny kolor szary i biały kolor]

+0

1+ za dobrą radę. –

1

Z moim testcode to działa tak, jak się spodziewałem, że praca:

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

Użytkownik prosi o problem w swoim specyficznym kodzie, a nie o działającą metodę/kod. Zawsze podajesz alternatywę. Dobrze. –

Powiązane problemy