Ресайз картинки в панели - Java

Узнай цену своей работы

Формулировка задачи:

Вобщем, добавил я картинку на панель. То-есть свою панель переопределил. Нарисовал фон. Открывается фрейм, растягивается, текст есть, кнопка на нем тоже, а вот картинка статическая. При изменениях ширины-длины фрейма не меняется, остается на заднем плане такого же размера. Остаются некрасивые серые поля или обрезается при маленьком размере фрейма Начал эксперементировать со Scale. Толку ноль, хотя никаких ошибок нет. как же правильно написать код здесь?
public class GamePictures extends JPanel
{
    private static final long serialVersionUID = 1L;
        
    private static ImageIcon imIcX = new ImageIcon(Content.x001);
    private static Image backImX = imIcX.getImage();
    
        public void paintComponent(Graphics g)
        {
            backImX.getScaledInstance(1280, 900, 4);
            g.drawImage(backImX, Image.SCALE_AREA_AVERAGING, Image.SCALE_REPLICATE, null);
        }
}
И так пробовал, тоже самое, вообще нет изменений!
public class GamePictures extends JPanel
{
    private static final long serialVersionUID = 1L;
        
    private static ImageIcon imIcX = new ImageIcon(Content.x001);
    private static Image backImX = imIcX.getImage();
    
        public void paintComponent(Graphics g)
        {
            //backImX.getScaledInstance(0, 0, 0);
            g.drawImage(backImX, 0, 0, null);
        }
}
Проблему решил.
Image img = ((ImageIcon) Library.i01).getImage();
    Image imgIm = img.getScaledInstance(intWigthButton, intHeightButton, java.awt.Image.SCALE_SMOOTH);  
    ImageIcon icoButtonPNG = new ImageIcon(imgIm);
Увидел, что у меня на кнопки картинки ставятся тем же путем -_-
Однако.. проблема другая. Картинка прорисовывается лишь когда меняешь размер фрейма немного. Сразу при открытии фрейма - он пустой -_- Пытался в конце кода вставить repaint(); - безрезультатно...
Попытался сделать так, заработало сразу... однако забило программу постоянным репэйнтом -_-
public class GamePictures extends JPanel
{
    private static final long serialVersionUID = 1L;
 
    ImageIcon imIcX = new ImageIcon(Content.x00X);
    Image buildScale = imIcX.getImage().getScaledInstance(1280, 900, java.awt.Image.SCALE_SMOOTH);
    
        public void paintComponent(Graphics g)
        {
            g.drawImage(buildScale, 0, 0, null);
            System.out.println("Перерисовка...");
            repaint();
        }
}
Как бы сделать его один раз, при открытии? Или слушатель на изменение размера ставить.. уф..
Но размер то сам в начале не меняется! и не должен.

Решение задачи: «Ресайз картинки в панели»

textual
Листинг программы
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import base.Content;
 
public class GamePictures extends JPanel
{
    private static final long serialVersionUID = 1L;
 
    ImageIcon imIcX = new ImageIcon(Content.x00X);
    Image build = imIcX.getImage();
    
        public void paintComponent(Graphics g)
        {
            g.drawImage(build, 0, 0, getWidth(), getHeight(), null);
        }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5