2

我有一个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);
   }
   }

那是图像类。

4

3 回答 3

6

“即时修复”是以自然大小绘制该元素。EG 改变这个:

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

对此:

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

这似乎合乎逻辑。“武器”可能应该以自然尺寸绘制。


..问题是图像在jpanel内看起来非常小,

不,问题似乎是面板本身非常小。图像被绘制为布局指定的面板的宽度和高度。

要增加 (BG) 图像的大小,请将组件添加到面板(正确布局)并以其首选大小显示面板。

于 2013-10-12T08:11:39.313 回答
1

可能是你的类看起来像这样:

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() 来更新面板上的图形。

于 2013-10-12T07:44:09.473 回答
0

使用维度对象来改变图像的大小

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

这样做,您可以根据需要拉伸照​​片的长度和宽度。

于 2017-11-18T11:50:06.783 回答