gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:23:11 25 4
gpt4 key购买 nike

最近我一直在尝试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();

}
}

为了测试,我使用完全填充此图像的 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 行为异常,他们是否有更好的修复方法?

最佳答案

问题出在这里:

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

您正在根据图像尺寸手动设置帧尺寸。然而,框架大小会考虑标题栏和可能的边框。如果标题栏占用 37 像素,则图像会少 37 像素。

我会做的是:

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

关于java - 为什么 JFrame 不显示整个图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35460733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com