Метод drawImage() рисует изображение маленького размера независимо от его размера.

У меня есть imagepanel класс, который рисует изображение на JPanel. Моя проблема в том, что изображение кажется очень маленьким внутри jpanelи я не знаю почему.

Я сделал все, что мог, и искал в сети и даже в некоторых java-книгах эту маленькую проблему, но безуспешно. Мне действительно нужна помощь в этом.

Я чрезвычайно новичок в Java.

    class Weapons extends JPanel {
    private Image weaponimage = weapon1.getImage();

    @Override
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    if (image != null)
        g.drawImage(weaponimage, 0, 0, getWidth(), getHeight(), this);
   }
   }

это класс изображения.

3 ответа

Решение

"Мгновенное исправление" - нарисовать этот элемент в натуральном размере. EG Изменить это:

g.drawImage(weaponimage, 0, 0, getWidth(), getHeight(), this);

К этому:

g.drawImage(weaponimage, 0, 0, this);

Что кажется логичным. "Оружие" должно быть нарисовано в натуральном размере.


..проблема в том, что изображение внутри jpanel кажется очень маленьким,

Нет. Проблема, кажется, в том, что сама панель очень мала. Изображение раскрашивается по ширине и высоте панели в соответствии с макетом.

Чтобы увеличить размер изображения (BG), добавьте компоненты на панель (правильно расположенные) и отобразите панель в нужном размере.

Может быть, ваш класс выглядит так:

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

    class Weapons extends JPanel {
        // get image according to your application logic
        BufferedImage image;

        @Override
        public void paint(Graphics g){
            super.paintComponent(g);
            g.drawImage(image, 0, 0, getWidth() - 1, getHeight() - 1, 0, 0, image.getWidth() - 1, image.getHeight() - 1, null);
        }

        public void setImage(BufferedImage image){
            this.image = image;
        }
    }

    class Main {
        Weapons weapons;

        public void updateWeapons(){
            // create image
            BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR);
            // draw on image

            // TO UPDATE WEAPONS GUI, below steps are impotant
            weapons.setImage(image);
            weapons.repaint();
        }
    }

Вы должны переопределить метод paint(). Затем вы можете установить изображение и вызвать repaint() для обновления графики на панели.

Используйте размерный объект, чтобы изменить размер изображения

    Weapons picture = new Weapons();
    picture.setPreferredSize(new Dimension(110, 160));
    panel.add(picture);

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

Другие вопросы по тегам