【问题标题】:How do i have a background image resize in a java gui?我如何在 java gui 中调整背景图像的大小?
【发布时间】:2025-12-30 00:10:11
【问题描述】:

所以我制作了一个 gui,我有一个背景图片。我不知道如何将其设置为背景,所以任何帮助都会很好。一个解释也很好。另外,在我们将该图像作为背景之后,我们如何将图像调整为窗口大小。如 image.setSize(frame.getHeight(), frame.getWidth()); 但我不知道这是否可行。图像名称为 ABC0001.jpg,框架名称为 frame。谢谢!

【问题讨论】:

标签: java swing user-interface jpeg


【解决方案1】:

要调整图像大小,您可以使用


public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // draw the image
}

或者你可以使用一个组件监听器,实现如下:


        final Image img = ...;
        ComponentListener cl = new ComponentAdapter() {
            public void componentResized(ComponentEvent ce) {
                Component c = ce.getComponent();
                img = im1.getScaledInstance(c.getWidth(), c.getHeight(), Image.SCALE_SMOOTH); 
            }
        };

使用第二种解决方案时,图像质量会随着时间的推移而下降,因此建议您将原件和副本分开保存。

【讨论】:

  • 一个提示。由于paintComponent 暗示JComponent 或任何从它继承的东西,而JComponent 实现ImageObserver,将绘图中的null 更改为this.. 好呼吁1)提及调整图像大小的其他方法,虽然我相信getScaledInstance 在很大程度上被放弃了,转而采用更好的方法来缩放图像。 2) 做笔记以保留原件。
  • RenderingHints 可用于建议drawImage() 中的特定插值类型。
【解决方案2】:

创建一个扩展 JPanel 的类。让该类通过覆盖paintComponent 来加载图像

class BackgroundPanel extends JPanel
{
    Image img;
    public BackgroundPanel()
    {
        // Read the image and place it in the variable img so it can be used in paintComponent
        img = Toolkit.getDefaultToolkit().createImage("ABC0001.jpg");
    }

    public void paintComponent(Graphics g)
    {
        g.drawImage(img, 0, 0, null); // draw the image
    }
}

现在您已经有了这个类,只需将它添加到您的 JFrame(或任何您想要背景的地方)。

//create refrence if you want to add stuff ontop of the panel
    private BackgroundPanel backGroundPanel;

//constructor
    add(backGroundPanel, BorderLayout.CENTER);

背景的大小将填满整个框架,因此无需缩放,除非您希望它更小

【讨论】:

  • 我认为最好将背景图像面板设置为内容面板,因为这样任何其他 GUI 组件都会出现在背景图像“上方”。
  • 假设是这样。我只是把这个写在我的头上。尽管如此,如果您在 backgroundPanel 上添加组件,它们仍然会出现在背景图像“上方”。
  • 是的,他们会的,这对你来说非常好,我不得不搜索 8=}
  • @mKorbel 应该是 g.drawImage(img,0,0,getWidth(),getHeight(),this); 1) “图像调整大小”是通过第三和第四个参数实现的 2) JPanelImageObserver - 如果代码正在使用,这一点尤其重要一种非阻塞方法(例如来自Toolkit)来加载它。
最近更新 更多