web-dev-qa-db-ja.com

JPanel setBackground(Color.BLACK)は何もしません

次のカスタムJPanelがあり、Netbeans GUIビルダーを使用してフレームに追加しましたが、背景は変わりません! g.fillOval()で描いた円が見えます。どうしましたか?

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;
    }
}
9
Primož Kralj

パネルが「不透明ではない」(透明)場合、背景色は表示されません。

14
Stefan

super.paintComponent();も呼び出して、Java APIが元の背景を描画できるようにします。スーパーは元のJPanelコードを参照します。

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

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

Boardコンストラクターで新しいJpanelオブジェクトを作成する必要があります。例えば

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

変更後

setOpaque(true);
3
Nilesh Jadav

ベアボーン実装を試したところ、動作します:

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;
    }
}
3
Torious