2013-11-17 2 views
0

У меня есть изображение, слишком высокое для моего JFrame, даже когда оно максимально. Я хочу динамически изменять его размер так, чтобы изображение никогда не обрезалось сверху или снизу JFrame. Я вставил изображение в JLabel как ImageIcon. Я попытался установить максимальный размер безрезультатно. Как я могу гарантировать, что высота изображения никогда не будет больше, чем JFrame? В идеале я бы хотел поддерживать постоянное отношение высоты к ширине. Изображение находится в портретной ориентации. Есть идеи?Как изменить размер изображения Высота до высоты JFrame?

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); 
} 
    } 
+0

Я хотел бы отметить, что вы задаете размер, прежде чем что-либо появится в реальной области содержимого. –

+0

Я отредактировал код, чтобы сделать его более ясным – Skylion

+0

Вы можете взглянуть на [это] (http://stackoverflow.com/questions/11959758/java-maintaining-aspect-ratio-of-jpanel-background-image/ 11959928 # 11959928) и [это] (http://stackoverflow.com/questions/14548808/scale-the-imageicon-automatically-to-label-size/14553003#14553003) – MadProgrammer

ответ

1

Я бы в идеале хотел бы сохранить отношение высоты к ширине постоянной.

Проверьте Darryl's Stretch Icon. Он будет уменьшаться/расти в зависимости от доступного пространства, сохраняя соотношение ширины и высоты.

0

Вы можете попробовать переопределить метод paintComponent(Graphics g) и нарисовать изображение размером с себя самостоятельно.

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); 
     } 
    };