Scale the ImageIcon automatically to label size

后端 未结 7 2053
梦如初夏
梦如初夏 2020-11-22 15:15

On my JFrame, I am using the following code to display an image on the Panel :

  ImageIcon img= new ImageIcon(\"res.png\");
  jLabel.setIcon(img);

7条回答
  •  我在风中等你
    2020-11-22 15:56

    It can also be done by overriding the paintComponent method of JLabel and drawing the image having width and height as that of JLabel. And if you wish to resize the image when the parent container is resized you can apply the WindowListener on the parent container and repaint the Jlabel instance each time the parent container is resized. Here is the Demo:

    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.ImageIcon;
    import javax.swing.SwingUtilities;
    import java.awt.Graphics;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    
    public class  LabelDemo extends JFrame
    {
        ImageIcon imageIcon;
        MyJLabel jLabel ;
        public LabelDemo ()
        {
            super("JLabel Demo");
        }
        public void createAndShowGUI()
        {
            imageIcon = new ImageIcon("apple.png");
            jLabel = new MyJLabel(imageIcon);
            getContentPane().add(jLabel);
            addWindowListener( new WindowAdapter()
            {
                public void windowResized(WindowEvent evt)
                {
                    jLabel.repaint();
                }
            });
            setSize(300,100);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
            jLabel.repaint();
        }
        public static void main(String st[])
        {
            SwingUtilities.invokeLater( new Runnable()
            {
                @Override
                public void run()
                {
                    LabelDemo demo = new LabelDemo();
                    demo.createAndShowGUI();
                }
            });
        }
    }
    class MyJLabel extends JLabel
    {
        ImageIcon imageIcon;
        public MyJLabel(ImageIcon icon)
        {
            super();
            this.imageIcon = icon;
        }
        @Override
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            g.drawImage(imageIcon.getImage(),0,0,getWidth(),getHeight(),this);
        }
    }
    

提交回复
热议问题