0
最近我一直在嘗試使用java圖形,並決定製作一個可以打印圖像拼貼的程序。該程序的構造函數需要一個圖像數組和每個圖像將顯示的寬度。爲什麼JFrame不顯示整個圖像?
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×20陣列完全與此圖像填充初始化的CollageTest。
當我運行該程序最初我用下面的設置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的行爲不端,是他們的一個更好的辦法來解決這個問題?
標題欄可以佔這些像素中的37個。它的窗口大小,而不是可繪製的畫布。 – jheimbouch
哦,這是有道理的。感謝您的幫助。 – star2wars3