Java Jframe JLabel,仅当我调整窗口大小时才刷新图像

Java Jframe JLabel,仅当我调整窗口大小时才刷新图像,java,swing,jframe,Java,Swing,Jframe,我试图创建一个缓冲区,在JLabel中显示它,并在JFrame中使用它。我在更改图像时遇到了一个问题:仅当我调整窗口大小时,图像才会更改 package buffer; import java.awt.Color; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import javax.imageio.Im

我试图创建一个缓冲区,在
JLabel
中显示它,并在
JFrame
中使用它。我在更改图像时遇到了一个问题:仅当我调整窗口大小时,图像才会更改

package buffer;

import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;

import javax.swing.JLabel;



public class principal extends javax.swing.JFrame {


private JLabel person=new JLabel();
public static final int tCuadrito=60;
private URL url=Buffer.class.getClass().getResource("/imagenes/persona.png");
private ImageIcon imagenIcon=new ImageIcon();
private BufferedImage gato=new BufferedImage(120,60,BufferedImage.BITMASK);

public principal() {
    initComponents();
    dibujar();
}

public void dibujar(){
    try{

    gato=ImageIO.read(url);
    }catch(IOException e){
        System.out.print("ERROR imagen no leida: "+e.toString());
    }

    imagenIcon.setImage(gato.getSubimage(0, 0, 60, 60));



    person.setBounds(0*tCuadrito, 0*tCuadrito, tCuadrito, tCuadrito);
    person.setVisible(true);
    person.setIcon(imagenIcon);
    contenedor.add(person);

}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    contenedor = new javax.swing.JPanel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyReleased(java.awt.event.KeyEvent evt) {
            formKeyReleased(evt);
        }
    });

    javax.swing.GroupLayout contenedorLayout = new javax.swing.GroupLayout(contenedor);
    contenedor.setLayout(contenedorLayout);
    contenedorLayout.setHorizontalGroup(
        contenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 400, Short.MAX_VALUE)
    );
    contenedorLayout.setVerticalGroup(
        contenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 300, Short.MAX_VALUE)
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(contenedor, javax.swing.GroupLayout.DEFAULT_SIZE,                           javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(contenedor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );

    pack();
}// </editor-fold>                                                      

private void formKeyReleased(java.awt.event.KeyEvent evt) {                                 
    switch(evt.getKeyCode()){
        case KeyEvent.VK_RIGHT:

            imagen=cat.getSubimage(60, 0, 60, 60);
            imagenIcon.setImage(imagen);
            person.setIcon(imagenIcon);

            break;

    }
}                                


public static void main(String args[]) {
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info :    javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
          java.util.logging.Logger.getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new principal().setVisible(true);
        }
    });
}

private javax.swing.JPanel contenedor;

}
包缓冲区;
导入java.awt.Color;
导入java.awt.event.KeyEvent;
导入java.awt.image.buffereImage;
导入java.io.IOException;
导入java.net.URL;
导入javax.imageio.imageio;
导入javax.swing.Icon;
导入javax.swing.ImageIcon;
导入javax.swing.JLabel;
公共类主体扩展了javax.swing.JFrame{
私有JLabel person=新JLabel();
公共静态最终int tCuadrito=60;
私有URL=Buffer.class.getClass().getResource(“/imagenes/persona.png”);
private ImageIcon imagenIcon=新的ImageIcon();
私有BuffereImage gato=新的BuffereImage(120,60,BuffereImage.BITMASK);
公共负责人(){
初始化组件();
dibujar();
}
公共void dibujar(){
试一试{
gato=ImageIO.read(url);
}捕获(IOE异常){
System.out.print(“错误图像编号leida:+e.toString());
}
imagenIcon.setImage(gato.getSubimage(0,0,60,60));
个人背景(0*tCuadrito,0*tCuadrito,tCuadrito,tCuadrito);
person.setVisible(true);
person.setIcon(imagenIcon);
添加(人);
}
@抑制警告(“未选中”)
//                           
私有组件(){
contendor=newjavax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addKeyListener(新java.awt.event.KeyAdapter(){
public void keyReleased(java.awt.event.KeyEvent evt){
formKeyReleased(evt);
}
});
javax.swing.GroupLayout contendorlayout=新的javax.swing.GroupLayout(contendor);
contendor.setLayout(contendorlayout);
contendorlayout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,400,短。最大值)
);
contendorLayout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,300,短。最大值)
);
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(contendor,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(contendor,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
);
包装();
}//                                                       
private void formKeyReleased(java.awt.event.KeyEvent evt){
开关(evt.getKeyCode()){
case KeyEvent.VK_RIGHT:
imagen=cat.getSubimage(60,0,60,60);
imagenIcon.setImage(imagen);
person.setIcon(imagenIcon);
打破
}
}                                
公共静态void main(字符串参数[]){
试一试{
for(javax.swing.UIManager.LookAndFeelInfo:javax.swing.UIManager.getInstalledLookAndFeels()){
if(“Nimbus”.equals(info.getName())){
setLookAndFeel(info.getClassName());
打破
}
}
}捕获(ClassNotFoundException ex){
getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}catch(实例化异常){
getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}捕获(非法访问例外){
getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}catch(javax.swing.UnsupportedLookAndFeelException ex){
getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}
//
/*创建并显示表单*/
invokeLater(new Runnable()){
公开募捐{
新主体().setVisible(true);
}
});
}
私有javax.swing.JPanel contendor;
}

要更新JFrame,必须使用

revalidate(); 
repaint();
因此,在更改GUI中的任何内容后,您需要重新验证JFrame()并重新绘制其内容


祝你好运

要更新JFrame,必须使用

revalidate(); 
repaint();
因此,在更改GUI中的任何内容后,您需要重新验证JFrame()并重新绘制其内容

祝你好运