Java 如何使JFrame内JPanel内JLabel内的BuffereImage正确刷新?

Java 如何使JFrame内JPanel内JLabel内的BuffereImage正确刷新?,java,swing,Java,Swing,这是我的密码: import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.util.Random; import javax.imageio.ImageIO; import javax.swing.*; public class FlatShadingDemo { static BufferedImage myPicture; static JLabel pic; static int

这是我的密码:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.*;

public class FlatShadingDemo {

static BufferedImage myPicture;
static JLabel pic;
static int width = 800;
static int height = 450;
static Random r = new Random();

private static void initialise() {
    JFrame frame = new JFrame("Flat shading demo");

    JPanel layout = new JPanel();
    layout.setLayout(new BoxLayout(layout,BoxLayout.Y_AXIS));
    frame.getContentPane().add(layout);

    myPicture = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    pic = new JLabel(new ImageIcon(myPicture));

    JButton button = new JButton("Refresh");
    button.addActionListener( 
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    render();
                }
            }
    );

    layout.add(pic);
    layout.add(button);

    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    initialise();

    render();

}

public static void render() {
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            myPicture.setRGB(x, y, new Color(r.nextInt(256),r.nextInt(128),r.nextInt(25)).getRGB());
        }
    }
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.awt.image.*;
导入java.util.Random;
导入javax.imageio.imageio;
导入javax.swing.*;
公共类FlatShadingDemo{
静态缓冲图片;
静态JLabel-pic;
静态整数宽度=800;
静态内部高度=450;
静态随机r=新随机();
私有静态void初始化(){
JFrame=新JFrame(“平面着色演示”);
JPanel布局=新的JPanel();
布局.setLayout(新的BoxLayout(布局,BoxLayout.Y_轴));
frame.getContentPane().add(布局);
myPicture=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_RGB);
pic=新JLabel(新图像图标(myPicture));
JButton按钮=新JButton(“刷新”);
按钮。addActionListener(
新建ActionListener(){
已执行的公共无效操作(操作事件e){
render();
}
}
);
布局。添加(图片);
布局。添加(按钮);
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
初始化();
render();
}
公共静态void render(){
对于(int y=0;y
当我运行这个程序时,会生成并显示一个图像。当我单击“刷新”时,在调整窗口大小之前不会发生任何事情。我需要刷新我的图片、图片、布局和框架中的哪一个,以及它的函数名是什么?我对swing和graphics完全不熟悉,因此如果有任何帮助,我将不胜感激。

更改:

public void actionPerformed(ActionEvent e) {
    render();
}
致:

详情如下:

重新绘制此组件

如果此组件是轻量级组件,则此方法会导致尽快调用此组件的绘制方法。否则,此方法会导致尽快调用此组件的更新方法

public void actionPerformed(ActionEvent e) {
    render();
    pic.repaint();
}