当前位置: 首页 > 知识库问答 >
问题:

为什么JFrame不显示整个图像?

齐坚成
2023-03-14

最近我一直在尝试java图形,并决定制作一个可以打印拼贴图像的程序。这个程序的构造函数接受一个图像数组和每个图像将显示的宽度。

import java.awt.*;
import java.awt.image.BufferedImage; 
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class CollageTest extends JComponent
{
    private  Image [][] board; //Holds images within it.
    private int pixel;//width of image.


    public CollageTest(Image x[][], int pixel)
    {
        board = x;
        this.pixel = pixel;
    }
    public int getPixel()
    {
        return pixel;
    }
    public void paint(Graphics g)
    {
        for (int i = 0; i < board.length; i++)
        {
            for (int j = 0; j < board[0].length; j++)
            {
                g.drawImage(board[i][j], (i * pixel) , (j * pixel), pixel, pixel, null);
            }
        }
    }




    public static void main(String args[])
    {
        BufferedImage[][] images = new BufferedImage[20][20];
        BufferedImage img = null;
        try {
            img = ImageIO.read(new File("gorge3.jpg"));
        } catch (IOException e) {
        }

        for (int i = 0; i < images.length; i++)
        {
            for (int j = 0; j < images[0].length; j++)
            {
                images[i][j] = img;
            }
        }
        CollageTest test = new CollageTest(images, 20);
        JFrame frame = new JFrame("MyCollage");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(test);
        frame.setSize(test.getPixel() * images.length,test.getPixel() * images[0].length);
        frame.setVisible(true);
        test.repaint();

    }
}

当我运行程序时,我最初使用以下方法来设置JFrame窗口的大小:

frame.setSize(test.getPixel() * images.length,test.getPixel() * images[0].length);

不幸的是,JFrame确实显示了部分图像。JFrame窗口不够低,无法显示所有窗口。为了再次确认我的数学没有出错,我用下面这行代码进行了测试:

frame.setSize(400, 400);//Math 20 images * 20 pixels = 400 pixels

同样的问题也发生了。直到我使用了下面的一行,整个图像才显示出来:

frame.setSize(400, 437);

所以我的问题是,为什么我的JFrame行为不端,他们是解决它的更好方法吗?

共有1个答案

孙绍辉
2023-03-14

问题在于:

frame.setSize(test.getPixel() * images.length,test.getPixel() * images[0].length);

您正在根据图像大小手动设置帧大小。但是,框架大小需要考虑标题栏和可能的边框。如果标题栏占37个像素,则图像的像素数将减少37个。

我要做的是:

将图像添加到JPanel中。您可以根据图像设置面板的大小。添加包含图像的面板后,pack()您的JFrame,以便它自己确定JFrame的首选大小。

 类似资料:
  • 问题内容: 我试图在不显示JFrame本身的情况下将JFrame渲染到图像。我试过使用这段代码: 然而,当这仅适用的设置。这将导致图像显示在屏幕上,这不是我想要的。我也尝试创建类似这样的东西: 但是,这将显示黑色图像(如上面的代码)。我很确定我所追求的是可能的,问题是我真的找不到如何做。我在使用自定义Swing组件方面的经验非常有限,因此任何信息都会受到赞赏。 谢谢。 问题答案: 这是应该解决问题

  • 我最近编写了一个包含背景图像的系统主页。设置背景后,我创建的按钮无法正确显示。它只是在我使用鼠标并指向按钮的位置后出现的。有人能教我如何解决这个问题吗?谢谢你的帮助。代码如下: 公共类主页扩展JFrame{

  • 路径没错啊,就是在static目录下的 图片啊

  • 问题内容: 最近,我一直在开发此网站,并试图在其中添加超棒的字体图标,以便其可扩展。 问题是他们没有露面。 看一下HTML: 要么 我确实把样式表引用放在了头上。 我不知道为什么他们没有出现。 这里是参考: 好了,这是完整的html: 问题答案: 根据您的参考,您有: 具体来说,就是这个部分。 但是,在您的完整html下是这样的: 您是否尝试过更换与您的全HTML变成这样?

  • 问题内容: 我希望框架的一部分包含JTextArea,但它会完全占据。我无法在此处追踪错误。 问题答案: 默认使用。当您仅将类似的东西添加到组件时,它将添加到的正中间(如果您未指定添加组件的位置),它将占据整个。 您应该使用正确的布局进行调整。

  • 问题内容: 我有点卡住。为什么不做这项工作?我只是收到一条错误消息: java.lang.NoSuchMethodError:主要 线程“主”中的异常 问题答案: main需要是静态的,并且必须具有String []而不是String的参数。 为了解决这个问题,将所有东西都放在构造函数中,例如