lhkbob, I believe you are right! Using the
g.drawImage(sheet, px,py, px+sw,py+sh, i*sw, j*sh, (i+1)*sw, (j+1)*sh, null);
implementation, when I set i = 1 and j = 0, it displays the first sprite properly! One problem with this method though is that the sprites aren't lined up evenly with the 2d array...for example when i = 8 and j = 0, it shows half of one sprite and half of another. This could probably be solved if I knew exactly where the array lined up and redid the sheet accordingly...
oNyx, thank you for the elaborate example! I think I understand what kind of method you used. When I get more time I'll be able to look at it more thoroughly. I think the technique of loading the images separately prior to the painting process is the most practical method, so I will probably end up using this one. Thanks everyone for the help!