【问题标题】:repaint() not calling paintComponent() in javarepaint() 没有在 java 中调用paintComponent()
【发布时间】:2016-10-15 15:50:45
【问题描述】:

我正在编写一段简单的代码,它创建一个 JFrame 对象,然后将背景涂成黑色并绘制一个蓝色方块。但是,repaint() 方法没有调用 paintComponent() 方法。

这是代码:

import java.util.Vector;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Container;

public class Snake extends JPanel{
        private Vector xCoords = new Vector();
        private Vector yCoords = new Vector();

        public Snake(){
                xCoords.add(150);
                yCoords.add(150);
        }

        public void startJFrame(){
                JFrame window = new JFrame();
                window.setSize(300, 300);
                window.setVisible(true);
                window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Container c = window.getContentPane();
                c.setBackground(Color.black);
        }

        public void paintRequest(){
                System.out.println("Request to paint received.");
                repaint();
        }

        public void paintComponent(Graphics g){
                super.paintComponent(g);
                System.out.println("paintComponent was called");
                g.setColor(Color.blue);
                int x = (int)xCoords.get(0);
                int y = (int)yCoords.get(0);
                g.fillRect(x, y, 10, 10);
        }

        public static void main(String[] args){
                Snake mkFrame = new Snake();
                mkFrame.startJFrame();
                mkFrame.paintRequest();
        }
}

我知道paintRequest() 被正确调用,因为它打印“收到的绘画请求”,但从未打印过“paintComponent was called”。在 gui 端,创建了 JFrame 窗口,它有黑色背景,但没有蓝色方块。提前感谢您的帮助。

【问题讨论】:

  • 提示:重写任何方法时,请使用@Override 表示法检查方法的拼写和签名。
  • 您可能还想考虑使用 Point 对象作为 x/y 值。

标签: java swing jframe paintcomponent repaint


【解决方案1】:

没有Snake 被添加到框架中!

变化:

    JFrame window = new JFrame();

收件人:

    JFrame window = new JFrame();
    window.add(new Snake());

【讨论】:

  • 我不敢相信我忘记了这一点。谢谢你。但是,这会使背景成为默认的灰白色,而不是黑色。你知道如何解决这个问题吗?
  • 面板完全覆盖了框架的内容面板。不要费心设置框架的颜色,只需设置面板的颜色即可。
猜你喜欢
  • 2015-08-26
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
相关资源
最近更新 更多