2012-04-13 10 views
9

mam folowing niestandardowych JPanel i ja aded go do mojego ramy za pomocą NetBeans GUI Builder ale tło nie zmieni! Widzę okrąg, rysując za pomocą g.fillOval(). Co jest nie tak?JPanel setBackground (Color.BLACK) nie robi nic

public class Board extends JPanel{ 

    private Player player; 

    public Board(){ 
     setOpaque(false); 
     setBackground(Color.BLACK); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(player.getxCenter(), player.getyCenter(), player.getRadius(), player.getRadius()); 
    } 

    public void updatePlayer(Player player){ 
     this.player=player; 
    } 
} 

Odpowiedz

14

Jeśli panel jest „nie nieprzezroczysty” (przezroczyste) przyzwyczajenie zobaczyć swój kolor tła.

+0

„Kolor tła jest używany tylko wtedy, gdy składnik jest nieprzezroczysta ...” - [ 'setBackground()'] (http://docs.oracle.com/javase/6/docs/api/ javax/Swing/JComponent.html # setBackground% 28java.awt.Color% 29). – trashgod

+8

+1 OP pisze 'setOpaque (false)' i nadal oczekuje, że kolor będzie widoczny :( –

14

Trzeba wezwać super.paintComponent(); jak również, aby umożliwić Java API rysowania oryginalnego tła. Super odnosi się do oryginalnego kodu JPanel.

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

    g.setColor(Color.red); 
    g.fillOval(player.getxCenter(), player.getyCenter(), player.getRadius(), player.getRadius()); 
} 
+0

Próbowałem że przed (znaleziono go po googlowania), ale to nie rozwiązuje problemu :( –

+0

nie jestem pewien, ale jeśli panel powinien być nieprzezroczyste –

+0

próbowałem że zbyt, bez zmian :) –

3

Właśnie próbuje wdrożenie goły i po prostu działa:

public class Test { 

    public static void main(String[] args) { 
      JFrame frame = new JFrame("Hello"); 
      frame.setPreferredSize(new Dimension(200, 200)); 
      frame.add(new Board()); 
      frame.pack(); 
      frame.setVisible(true); 
    } 
} 

public class Board extends JPanel { 

    private Player player = new Player(); 

    public Board(){ 
     setBackground(Color.BLACK); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(player.getCenter().x, player.getCenter().y, 
      player.getRadius(), player.getRadius()); 
    } 
} 

public class Player { 

    private Point center = new Point(50, 50); 

    public Point getCenter() { 
     return center; 
    } 

    private int radius = 10; 

    public int getRadius() { 
     return radius; 
    } 
} 
+0

pracuję w Netbeans I't tak trudno zrobić to w ten sposób, ale mimo to udało mi się ręcznie utworzyć moim pokładzie() i ręcznie dodałem go do mojej ramki.Pomyślałem, że mogę pracować z moją płytą za pomocą wbudowanego GUI Buildera, ale w ten sposób nie mogę zmienić rozmiaru tej płyty JPanel (nawet w kodzie, ponieważ jest ona autogenerowana i nie mam do niej dostępu). –

2

Trzeba utworzyć nowy obiekt JPanel w konstruktorze Nadzorczej. np

public Board(){ 
    JPanel pane = new JPanel(); 
    pane.setBackground(Color.ORANGE);// sets the background to orange 
} 
3
setOpaque(false); 

Przestawiono

setOpaque(true); 
+0

Może możesz wyjaśnić w kilku słowach, jaki jest problem z kodem, który ma plakat, a następnie, jakie jest twoje rozwiązanie. Dziękuję Ci! –

-1

w celu całkowitego ustawić kontekst danego koloru:

1) najpierw ustawić kolor tła

2) metoda połączenia "Wyczyść (0,0, this.getWidth(), This.getHeight())”(szerokość i wysokość składnika powierzchni farby)

myślę, że to jest podstawowa procedura ustawić tło ... miałem ten sam problem.

Kolejna przydatna wskazówka: jeśli chcesz narysować BUT NOT w określonej strefie (coś w rodzaju maski lub "dziury"), wywołaj metodę setClip() grafiki z kształtem "otworu" (dowolny kształt) a następnie wywołaj metodę Clear() (tło powinno być wcześniej ustawione na kolor "hole").

Można dokonać bardziej skomplikowanych stref klipu poprzez wywołanie metody klip() (dowolny razy chcesz) po wywołaniu metody setClip(), aby mieć przecięcia wycinek kształtach.

Nie mogę znaleźć żadnego sposobu związkami lub inwersji stref klip, tylko skrzyżowaniach, szkoda ...

Nadzieja pomaga

+0

Ta odpowiedź jest bardzo ogólnikowa, przechodzi do losowych tematów, które nie mają znaczenia dla OP, a krok 2 nawet nie kompiluje, a może tak, ale nie ma kontekstu podanego dla tej metody. Przynajmniej nie istnieje jako metoda członkowska JPanel lub JFrame. Podaj więcej kontekstu i zwięźlej w swoich wpisach. – kevr

Powiązane problemy