我无法在 Jframe 内动态 repaint()。
public static BufferedImage createBufferedImage(BufferedImage image)
{
ColorModel cm = image.getColorModel();
boolean premultiplied = cm.isAlphaPremultiplied();
WritableRaster raster = image.copyData(image.getRaster());
return new BufferedImage(cm, raster, premultiplied, null);
}
public static void main(String[] args) {
BufferedImage img = new BufferedImage(old_width_i, old_height_i, BufferedImage.TYPE_INT_RGB);
img=createBufferedImage(img_white_screen);
JFrame frame=new JFrame();
JLabel label = new JLabel(new ImageIcon(img));
frame.getContentPane().add(label, BorderLayout.WEST);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
img.flush();
img=createBufferedImage(img_black_screen);
// frame.removeAll();
// frame.revalidate();
// label.removeAll();
// label = new JLabel(new ImageIcon(img));
// frame.getContentPane().add(label, BorderLayout.WEST);
frame.repaint();
}
它基本上创建一个屏幕,其中第一个分配给“img”(即 img_white_screen)变量,并且不会更改为第二个分配,即 img_black_screen
最佳答案
don't to use Thread.sleep(1000); ,这个code line lock Event Dispatch Thread ,
不知道为什么需要暂停代码执行一秒钟,use Swing Timer instead
用于在 Java 中显示要使用的图像
不要画画
XxxImage
或Icon / ImageIcon
直接到JFrame
,使用JPanel / JComponent
或JLabel
关于java - 无法在java中重新绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14788184/