为什么 JAVA paint() 方法不起作用?
Why is JAVA paint() method not working?
谁能解释为什么这段代码没有显示 20 x 20 的白色椭圆?
我已经添加了评论,因此您不必搜索太多。我认为我在 paint 方法中做错了什么。或者是别的什么?
这是代码:
public class Dodge extends JFrame{ //EXTENDED JFRAME
public Dodge(){
JPanel panel = new JPanel();
//
panel.setBackground(Color.BLACK); //
//
add(panel); //
setTitle("Dodging game"); //
setDefaultCloseOperation(EXIT_ON_CLOSE); // GUI SETUP
setSize(500, 400); //
setLocationRelativeTo(null); //
setResizable(true); //
}
public void paint(Graphics g){
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.WHITE); //THIS METHOD SHOULD GIVE ME AN OVAL
g.fillOval(5, 5, 20, 20);
repaint();
}
public static void main(String[] args){ //
SwingUtilities.invokeLater(new Runnable() { // MAIN THREAD
@Override //
public void run() {
new Dodge().setVisible(true); //
我是新手所以请清楚哪里出了问题
另外请解释一下这个方法是如何在我什至没有调用它的情况下导致程序发生变化的?
paint()
组件渲染时自动调用方法。
您的椭圆没有显示,因为它隐藏在框架或标题栏的工具栏后面。 (不管你怎么称呼它,都是最上面的那个)。
将您的 fillOval 更改为 g.fillOval(50, 50, 20, 20);
,您将看到它。
此外,如果您覆盖它,您应该始终调用 super.paint(g)
。
此外,不要从您的 paint()
方法中调用 repaint()
。
谁能解释为什么这段代码没有显示 20 x 20 的白色椭圆? 我已经添加了评论,因此您不必搜索太多。我认为我在 paint 方法中做错了什么。或者是别的什么? 这是代码:
public class Dodge extends JFrame{ //EXTENDED JFRAME
public Dodge(){
JPanel panel = new JPanel();
//
panel.setBackground(Color.BLACK); //
//
add(panel); //
setTitle("Dodging game"); //
setDefaultCloseOperation(EXIT_ON_CLOSE); // GUI SETUP
setSize(500, 400); //
setLocationRelativeTo(null); //
setResizable(true); //
}
public void paint(Graphics g){
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.WHITE); //THIS METHOD SHOULD GIVE ME AN OVAL
g.fillOval(5, 5, 20, 20);
repaint();
}
public static void main(String[] args){ //
SwingUtilities.invokeLater(new Runnable() { // MAIN THREAD
@Override //
public void run() {
new Dodge().setVisible(true); //
我是新手所以请清楚哪里出了问题
另外请解释一下这个方法是如何在我什至没有调用它的情况下导致程序发生变化的?
paint()
组件渲染时自动调用方法。
您的椭圆没有显示,因为它隐藏在框架或标题栏的工具栏后面。 (不管你怎么称呼它,都是最上面的那个)。
将您的 fillOval 更改为 g.fillOval(50, 50, 20, 20);
,您将看到它。
此外,如果您覆盖它,您应该始终调用 super.paint(g)
。
此外,不要从您的 paint()
方法中调用 repaint()
。