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

时间:2016-02-17 15:21:45

标签: java jframe

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

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();

    }
}

为了测试我使用完全填充此图像的20 x 20阵列初始化了CollageTest。 I filled an array with this image

当我最初运行程序时,我使用以下内容来设置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 个答案:

答案 0 :(得分:1)

问题出在这里:

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

您可以根据图像尺寸手动设置边框尺寸。但是,帧大小将标题栏和可能的边界考虑在内。如果标题栏占用37个像素,则会使图像缩小37个像素。

我要做的是:

将图像添加到JPanel。您可以根据图像设置面板的大小。添加包含图片的面板后,{J} {1}}您的JFrame,以便它自行确定JFrame的首选大小。