2015-10-25 3 views
1

я применяю изображение в JLabel с помощью команды .setIcon(), а затем добавить ярлык на панельJLabel + фото

public browser() throws IOException { 
JLabel lblimg; 
Image img; 
ImageIcon ico; 
img = ImageIO.read(new File("<FilePath>")); 
ico = new ImageIcon(img); 
lblimg.setIcon(ico); 
lblimg.setBounds(300,90,120,120); 
add(lblimg); 
} 

, но это не изменить размер изображения внутри метки, таким образом, просто фрагмент изображения появится, если он больше размера метки.

Кто-нибудь знает способ вставки изображения в фон метки, изменение размера изображения в нем?

ответ

1

Вот метод, который я написал несколько лет назад, чтобы изменить размер изображения на Java.

public ImageIcon picturePrep(ImageIcon icon) { 
    final int DESIRED_WIDTH = 880; 
    double imageWidth = icon.getIconWidth(); 
    int imageHeight = icon.getIconHeight(); 
    imageWidth = DESIRED_WIDTH/imageWidth; 
    imageHeight = (int) (imageWidth * imageHeight); 
    Image img = icon.getImage(); 
    return new ImageIcon(img.getScaledInstance(DESIRED_WIDTH, imageHeight, Image.SCALE_SMOOTH)); 
} 
2

Создать BufferedImage и получить масштабируемый экземпляр, установите его ширину и высоту по ширине и высоте в том, что на этикетке. Теперь, если вы даже измените размер этикетки, изображение будет покрывать этикетку.

Для примера: lblimg.setBounds(300, 90, 300, 120);

BufferedImage bimg =ImageIO.read(new File("file path")); 
     ico = new ImageIcon(bimg.getScaledInstance(lblimg.getWidth(), lblimg.getHeight(), Image.SCALE_SMOOTH)); 
     lblimg.setIcon(ico); 

Следующее изображение было уменьшено в зависимости от ширины и высоты этикетки.

lblimg.setBounds(300, 90, 100, 50); 

enter image description here

1

Использовать соответствующий макет менеджер, чтобы заботиться это для вас автоматически. См. Laying Out Components Within a Container для более подробной информации.

Если по какой-то странной причине вы не можете использовать диспетчер компоновки, то вам, вероятно, следует рассмотреть решение, основанное на пользовательской покраске, вы можете использовать предпочтительный размер компонентов, чтобы обеспечить ему лучшую информацию, когда настройки ограничивающая

BufferedImage img = ImageIO.read(new File("<FilePath>")); 
JLabel lblimg = new JLabel(new ImageIcon(img)); 
lblimg.setBounds(new Rectangle(new Point(300, 90), lblimg.getPreferredSize())); 

Тогда вам не нужно загадывать

Смежные вопросы