Как resize JLabel ImageIcon?

Я создаю приложение Java Swing, которое имеет следующий макет ( MigLayout ):

 [icon][icon][icon][....] where icon = jlabel and the user can add more icons 

Когда пользователь добавляет или удаляет значки, другие должны сокращаться или расти.

Мой вопрос очень прост: у меня есть JLabel который содержит ImageIcon ; как resize значка?

Изменение размера значка не является простым. Для масштабирования изображения вам нужно использовать графику 2D 2D. Первым параметром является class Image, который вы можете легко получить из classа ImageIcon . Вы можете использовать class ImageIcon для загрузки файла изображения, а затем просто вызвать метод getter для получения изображения.

 private Image getScaledImage(Image srcImg, int w, int h){ BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = resizedImg.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.drawImage(srcImg, 0, 0, w, h, null); g2.dispose(); return resizedImg; } 

Попробуй это :

 ImageIcon imageIcon = new ImageIcon("./img/imageName.png"); // load the image to a imageIcon Image image = imageIcon.getImage(); // transform it Image newimg = image.getScaledInstance(120, 120, java.awt.Image.SCALE_SMOOTH); // scale it the smooth way imageIcon = new ImageIcon(newimg); // transform it back 

(нашел его здесь )

И как насчет ?:

 ImageIcon imageIcon = new ImageIcon(new ImageIcon("icon.png").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT)); label.setIcon(imageIcon); 

From: Изменить размер изображения в соответствии с JLabel

Один (быстрый и грязный) способ resize изображений, чтобы использовать HTML и указать новый размер в элементе изображения. Это даже работает для анимированных изображений с прозрачностью.

Я согласен, что этот код работает, чтобы размер ImageIcon из файла для отображения, сохраняя соотношение сторон, которое я использовал ниже.

 /* * source File of image, maxHeight pixels of height available, maxWidth pixels of width available * @return an ImageIcon for adding to a label */ public ImageIcon rescaleImage(File source,int maxHeight, int maxWidth) { int newHeight = 0, newWidth = 0; // Variables for the new height and width int priorHeight = 0, priorWidth = 0; BufferedImage image = null; ImageIcon sizeImage; try { image = ImageIO.read(source); // get the image } catch (Exception e) { e.printStackTrace(); System.out.println("Picture upload attempted & failed"); } sizeImage = new ImageIcon(image); if(sizeImage != null) { priorHeight = sizeImage.getIconHeight(); priorWidth = sizeImage.getIconWidth(); } // Calculate the correct new height and width if((float)priorHeight/(float)priorWidth > (float)maxHeight/(float)maxWidth) { newHeight = maxHeight; newWidth = (int)(((float)priorWidth/(float)priorHeight)*(float)newHeight); } else { newWidth = maxWidth; newHeight = (int)(((float)priorHeight/(float)priorWidth)*(float)newWidth); } // Resize the image // 1. Create a new Buffered Image and Graphic2D object BufferedImage resizedImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = resizedImg.createGraphics(); // 2. Use the Graphic object to draw a new image to the image in the buffer g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.drawImage(image, 0, 0, newWidth, newHeight, null); g2.dispose(); // 3. Convert the buffered image into an ImageIcon for return return (new ImageIcon(resizedImg)); } 

Это сохранит правильное соотношение сторон.

  public ImageIcon scaleImage(ImageIcon the_icon, int the_w, int the_h) { int nw = icon.getIconWidth(); int nh = icon.getIconHeight(); if(icon.getIconWidth() > w) { nw = w; nh = (nw * icon.getIconHeight()) / icon.getIconWidth(); } if(nh > h) { nh = h; nw = (icon.getIconWidth() * nh) / icon.getIconHeight(); } return new ImageIcon(icon.getImage().getScaledInstance(nw, nh, Image.SCALE_DEFAULT)); } 
  • изображения не загружаются
  • Swing: кнопки переключения каналов вместе с группой кнопок вместе с соответствующими пунктами меню
  • Добавление нескольких JProgressBar в TableColumn JTable
  • JOptionPane - проверка ввода пользователем и предотrotation закрытия до тех пор, пока не будут выполнены условия
  • Как совместить прослушиватели событий с запросом на событие?
  • Путаница обнаружения столкновений прямоугольника Java
  • Как использовать собственный редактор ячеек JTable и средство отображения ячеек
  • Как генерировать исключения из RepaintManager
  • Java Swing: динамическое изменение GUI
  • Как я могу прослушивать нажатия клавиш (внутри Java Swing) для всех компонентов?
  • Текстовое всплывающее окно всплывает над Swing JTextArea?
  • Давайте будем гением компьютера.