tags:

views:

131

answers:

3

Hello everyone,

I create a program that place random image in grid layout format. The size of the grid layout is 6 x 6 = 36. Only 10 were filled with images (each image was different) and the rest were empty.

alt text

How can I save it to a file and read it again, so it will display the same images with same placement on the grid?

Here is the code that I used to save the images:

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

}
+1  A: 

whoops, misread your question.

I would link each grid value to an index of an array that would specify picture/file. When that setup is saved, save a new array with the values that associate with the grid (26 of them should be null, right?) When the file is opened initially have the program read from an array, if the array is completely empty randomize.

--make a foreach loop for the grids, and if they are empty, set the array value to null, else set the value to the image associated with it. Use pdraw.checkImage();

Mike
Right, but it looks like it's supposed to leave some of the cells blank, only fill 10 of them.
Matt Blaine
Thanks Mike, but I just want to fill the grid with 10 images. How can I save it into a file and open the file again if future to see the same images and placement on the grid?
Jessy
Matt@ yes, just 10 of them ..the rest is empty label.
Jessy
This is difficult :-(
Jessy
+1  A: 

In your code, is rand of the class java.util.Random? If so, you could "seed" it yourself, and then just save the seed value to a text file. For any given seed, a (pseudo-)random number generator will produce the same "random" numbers in the same order. So:

Random rand = null;

Then, either create a new "seed" and save it to a file:

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

Or read a previously saved value back in:

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

Do note that this code doesn't check to make sure the file exits, or that the file isn't empty, or that the file doesn't contain something other than a valid number, etc...

Matt Blaine
A: 

Well you have to save a config file with all the information you need. You could probably use a Properties file. So you loop through your grid and everytime you find a cell with an image you save the index and the file name. Then when you reload the program you loop through all the potential property values to find ones that exist and then you get the filename of the image, read the image and load it into the cell.

camickr