我创建了一个以网格布局格式放置随机图像的程序。 网格布局的大小为6 x 6 = 36。 只有10个图像(每个图像都不同),其余图像都是空的。
alt text http://freeimagehosting.net/uploads/bfb7e85f63.jpg
如何将其保存到文件并再次阅读,以便在网格上显示相同位置的相同图像?
以下是我用来保存图片的代码:
//image file
String []arrPic = {"pic1.jpg","pic2.jpg","pic3.jpg","pic4.jpg","pic5.jpg","pic6.jpg","pic7.jpg","pic8.jpg","pic9.jpg","pic10.jpg",,"pic11.jpg","pic12.jpg","pic13.jpg"};
ArrayList<String> pictures = new ArrayList<String>(Arrays.asList(arrPic));
ArrayList<String> file = new ArrayList<String>();
JPanel pDraw = new JPanel(new GridLayout(6,6,2,2));
...
//fill all grids with empty label
for (int i =0; i<(6*6); i++){
JLabel lbl = new JLabel("");
pDraw.add(lbl);
}
...
//Choose random box to be filled with images
for(int i=0; i<10; i++){
Boolean number = true;
while(number){
int n = rand.nextInt(35);
if(!(arraylist.contains(n)))
number = false;
arraylist.add(n);
}
//fill the grids with images
for(int i=0; i<arraylist.size(); i++){
//select random image from arraylist
int index = rand.nextInt (pictures.size());
String fileName = (String) pictures.get(index );
//find the image file
icon = createImageIcon(fileName);
//save the file in a new file
file.add(fileName);
//rescaled the image
int x = rand.nextInt(50)+50;
int y = rand.nextInt(50)+50;
Image image = icon.getImage().getScaledInstance(x,y,Image.SCALE_SMOOTH);
icon.setImage(image);
//remove empty label and replace it with an image
int one = (Integer) arraylist.get(i);
pDraw.remove(one);
final JLabel label;
pDraw.add(label,one);
}
答案 0 :(得分:2)
在您的代码中,rand
类是java.util.Random
吗?如果是这样,您可以自己“播种”它,然后将种子值保存到文本文件中。对于任何给定的种子,(伪)随机数发生器将以相同的顺序产生相同的“随机”数字。所以:
Random rand = null;
然后,创建一个新的“种子”并将其保存到文件中:
long seed = System.currentTimeMillis();
rand = new Random(seed);
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("whatever.txt"));
writer.write(Long.toString(seed));
writer.close();
} catch(IOException e) {
e.printStackTrace();
}
或者在以下位置读取以前保存的值:
long seed = 0;
try {
BufferedReader reader = new BufferedReader(new FileReader("whatever.txt"));
seed = Long.parseLong(reader.readLine());
reader.close();
} catch(IOException e) {
e.printStackTrace();
}
rand = new Random(seed);
请注意,此代码不会检查以确保文件退出,或文件不为空,或者文件中不包含有效数字以外的内容等等。
答案 1 :(得分:1)
哎呀,误读了你的问题。
我会将每个网格值链接到指定图片/文件的数组的索引。保存该设置时,保存一个新数组,其中包含与网格关联的值(其中26个应该为空,对吗?)当文件打开时,最初从数组读取程序,如果数组是完全空的随机化
- 为网格创建一个foreach循环,如果它们为空,则将数组值设置为null,否则将值设置为与其关联的图像。使用pdraw.checkImage();
答案 2 :(得分:1)
您必须使用所需的所有信息保存配置文件。您可以使用属性文件。因此,您遍历网格,每次找到带有图像的单元格时,都会保存索引和文件名。然后当你重新加载程序时,你遍历所有潜在的属性值来找到存在的属性值,然后你得到图像的文件名,读取图像并将其加载到单元格中。