Вопрос по swing, java – JPanel setBackground (Color.BLACK) ничего не делает
У меня есть следующий пользовательский 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>
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());
}
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;
}
}
1) сначала установите цвет фона
2) вызвать метод & quot; Очистить (0,0, this.getWidth (), this.getHeight ()) & quot; (ширина и высота области рисования компонента)
Я думаю, что это основная процедура для установки фона ... У меня была такая же проблема.
Еще один полезный совет: если вы хотите нарисовать НО НЕ в определенной зоне (что-то вроде маски или «дыры»), вызовите метод setClip () для графики с «дырой». shape (любая форма), а затем вызовите метод Clear () (фон должен быть предварительно установлен в цвет «дыра»).
Вы можете создавать более сложные зоны клипа, вызывая метод clip () (в любое время, когда вам захочется) ПОСЛЕ вызова метода setClip () для пересечения фигур отсечения.
Я не нашел никакого метода для объединений или инверсий зон клипов, только пересечения, слишком плохо ...
Надеюсь, поможет