java - repaint() 不再工作

标签 java swing 2d rendering

我目前正在学习 java,并尝试通过 JPanel 在 JFrame 上绘图...

问题是,我的渲染代码可以正常运行,但我稍微更改了一些内容,现在 repaint() 方法将不再刷新 JPanel...

我在每个方法中都有 System.out.println() 调用,但我的控制台如下所示:

render render render render

,当我调用 render() 方法时。之前还可以工作.... 无论如何,这是我的代码。

package Graphics;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Surface extends JPanel {

    JFrame frame;
    RandomFrame rf;

    public Surface(JFrame frame) {
        this.frame = frame;
        rf = new RandomFrame(frame.getWidth(), frame.getHeight());
    }

private void draw(Graphics g) {

    Graphics2D g2d = (Graphics2D) g;

    g2d.setPaint(Color.blue);

    int w = getWidth();
    int h = getHeight();

    g2d.drawImage(rf.getRandom(w, h), null, 0, 0);
    System.out.println("draw");
}

@Override
public void paintComponent(Graphics g) {
    System.out.println("paintComponent");
    super.paintComponents(g);
    draw(g);
}

public void render() {
    System.out.println("render");
    repaint();
}

}

,而 RandomFrame 返回带有随机数据的 BufferedImage。

最佳答案

在您获取框架的 Surface 构造函数内,确保您的 SurfacePanel 已添加到框架中。例如

公共(public)表面(JFrame框架){ this.frame = 框架; 框架.setContentPane(this);//添加这一行 rf = new RandomFrame(frame.getWidth(),frame.getHeight()); }

关于java - repaint() 不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30093696/

相关文章:

Java - 如何从 JSON Schema 获取所有字段名称

java - 使用java解压文件

java - 带有带有正确区域设置的 float 列的 JTable

java - 如何遍历二维字符数组在java中搜索单词?

JavaScript 迭代二维数组并返回不匹配项

java - 将通过 Android Studio 生成的 GAE Endpoints 带到 Eclipse

java - 如何在 Java8 中为 void(非 Void)方法指定函数类型?

java - Color.getColor(字符串名称) 不起作用

java - JComboBox 不显示箭头

java - LibGDX 字节码读写器