java - java中的repaint()不调用paintComponent()

标签 java swing jframe paintcomponent repaint

我正在编写一段简单的代码,它创建一个 JFrame 对象,然后将背景绘制为黑色并绘制一个蓝色方 block 。然而,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 窗口,它具有黑色背景,但没有蓝色方 block 。预先感谢您的帮助。

最佳答案

框架中从未添加过!

更改:

    JFrame window = new JFrame();

致:

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

关于java - java中的repaint()不调用paintComponent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061113/

相关文章:

java - KeyListener 不响应按键输入

java - JFrame 不重绘

java - 使 JFrame/JPanel 不可点击

java - java中随机生成一大块数字字符串

java - 通过 revalidate() 和 repaint() 更新 Swing 中的 JMenu 不起作用

java - 如何在不替换 JTextArea 中的文本的情况下设置文本?

java - 如何从我的小程序中打开网页?

java - 发送带有嵌入图像的电子邮件

java - 来自 Java 应用程序客户端的 Jersey POST 请求

Java:从字符串创建日期对象并插入MySQL