Skylion
Skylion

Reputation: 2752

How to resize image Height to JFrame Height?

I have an image that is too tall for my JFrame even when it is maximized. I want to dynamically resize it so that the image will never be clipped by the top or bottom of the JFrame. I have inserted the image within a JLabel as an ImageIcon. I have tried setting the maximum size to no avail. How do I ensure that the height of the image will never be larger than the JFrame? I would ideally like to keep the ratio of height to width constant. The image is in a portrait orientation. Any ideas?

public class myClass extends JFrame {   
private void initGUI(){
    pane = getContentPane();
    pane.setLayout(new BorderLayout());

    next = new JButton("Next");


    previous = new JButton("Previous");

    page = new JLabel(loadImg());
    page.setMaximumSize(this.getSize());
    pane.add(next, BorderLayout.EAST);
    pane.add(previous, BorderLayout.WEST);
    pane.add(page, BorderLayout.CENTER);
}
    }

Upvotes: 0

Views: 146

Answers (2)

Brett
Brett

Reputation: 159

You can try overriding the paintComponent(Graphics g) method and drawing the resized image yourself.

    page = new JLabel(loadIMG()){
        @Override
        paintComponent(Graphics g)
        {
            //So we don't kill default behaviour
            super.paintComponent(g);

            int scaledWidth, scaledHeight;

            //pseudo-code
            scale and store into scaledWidth and scaledHeight;

           render with g.drawImage(icon, x, y, scaledWidth, scaledHeight, null);
        }
    };

Upvotes: 0

camickr
camickr

Reputation: 324118

I would ideally like to keep the ratio of height to width constant.

Check out Darryl's Stretch Icon. It will shrink/grow depending on the space available, while maintaining the width/height ratio.

Upvotes: 1

Related Questions