Вопрос по swing, java – JPanel setBackground (Color.BLACK) ничего не делает

9

У меня есть следующий пользовательский JPanel, и я добавил его в свой фрейм, используя Netbeans GUI Builder, но фон не изменится! Я могу видеть круг, рисуя с помощью g.fillOval (). Что не так?

<code>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;
    }
}
</code>

Ваш Ответ

6   ответов
14

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());
}
Error: User Rate Limit ExceededSSCCE.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Primož Kralj
Error: User Rate Limit Exceeded Primož Kralj
Error: User Rate Limit Exceeded
14

на.

Error: User Rate Limit ExceededsetBackground().
Error: User Rate Limit ExceededsetOpaque(false)Error: User Rate Limit Exceeded
2

например

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

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;
    }
}
Error: User Rate Limit Exceeded Primož Kralj
-1

1) сначала установите цвет фона

2) вызвать метод & quot; Очистить (0,0, this.getWidth (), this.getHeight ()) & quot; (ширина и высота области рисования компонента)

Я думаю, что это основная процедура для установки фона ... У меня была такая же проблема.

Еще один полезный совет: если вы хотите нарисовать НО НЕ в определенной зоне (что-то вроде маски или «дыры»), вызовите метод setClip () для графики с «дырой». shape (любая форма), а затем вызовите метод Clear () (фон должен быть предварительно установлен в цвет «дыра»).

Вы можете создавать более сложные зоны клипа, вызывая метод clip () (в любое время, когда вам захочется) ПОСЛЕ вызова метода setClip () для пересечения фигур отсечения.

Я не нашел никакого метода для объединений или инверсий зон клипов, только пересечения, слишком плохо ...

Надеюсь, поможет

Error: User Rate Limit Exceeded
3
setOpaque(false); 

CHANGED to

Error: User Rate Limit Exceeded

Похожие вопросы