我目前正在学习 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/