2012-02-19 2 views
3

좋아요, 그럼 데이터베이스에서 하나의 이미지를 가져 오는 데 아무런 문제가 없습니다. 나는 이것을 JLabelImageIcon으로 돌려 보낸다.데이터베이스에서 Java로 여러 이미지 표시

while (rs.next()) { 
images = rs.getString("path"); 
System.out.println(images + "\n"); 
System.out.println("TESTING - READING IMAGE"); 
BufferedImage img = ImageIO.read(new File(images)); 
System.out.println("img = " + images); 
imagelabel = new JLabel(new ImageIcon(img)); 
imagelabel.setPreferredSize(new Dimension(200, 200)); 
imageselect.add(imagelabel); 

는 그러나, 나는 여러 이미지와 함께이 작업을 수행하고, CardLayout에 새로운 JPanelJLabel를 할당해야합니다. 나는 루프의 일종을 필요로 알고, 이것을하는 가장 좋은 방법에 대한 제안을 찾고! 여기

BufferedImage imgA = ImageIO.read(new File("lmkpackage/images/one.jpg")); 
      image1 = new JLabel(new ImageIcon(imgA)); 
      image1.setPreferredSize(new Dimension(200, 200)); 
      img1 = new JPanel();   
      img1.add(image1); 

      loadcard.add(img1,"1"); 
      cl2.show(loadcard,"1"); 

      BufferedImage imgB = ImageIO.read(new File("lmkpackage/images/two.jpg")); 
      image2 = new JLabel(new ImageIcon(imgB)); 
      image2.setPreferredSize(new Dimension(200, 200)); 
      img2 = new JPanel();   
      img2.add(image2); 

      loadcard.add(img2, "2"); 

      BufferedImage imgC = ImageIO.read(new File("lmkpackage/images/three.jpg")); 
      image3 = new JLabel(new ImageIcon(imgC)); 
      image3.setPreferredSize(new Dimension(200, 200)); 
      img3 = new JPanel();   
      img3.add(image3); 

      loadcard.add(img3, "3"); 

      BufferedImage imgD = ImageIO.read(new File("lmkpackage/images/four.jpg")); 
      image4 = new JLabel(new ImageIcon(imgD)); 
      image4.setPreferredSize(new Dimension(200, 200)); 
      img4 = new JPanel(); 
      img4.add(image4); 

      loadcard.add(img4, "4"); 

      BufferedImage imgE = ImageIO.read(new File("lmkpackage/images/five.jpg")); 

      image5 = new JLabel(new ImageIcon(imgE)); 
      image5.setPreferredSize(new Dimension(200, 200)); 
      img5 = new JPanel();   
      img5.add(image5); 

      loadcard.add(img5, "5"); 

내 요구대로에서 시도입니다 :

while (rs.next()) { 
         images = rs.getString("path"); 
         System.out.println(images + "\n"); 
         System.out.println("TESTING - READING IMAGE"); 
         for(i=0; i < 5; i++){      
         BufferedImage img[i] = ImageIO.read(new File(images)); 
         imglab[i] = new JLabel(new ImageIcon(imgIcon[i])); 
         imgPanel[i]= new JPanel(); 
         imgPanel[i].add(imglab[i]); 
         loadcard.add(imgPanel[i], i);          
         }//End For 
        }//EndWhile 

그리고 임 점점 오류입니다 :

letmeknow.java:181 : ']'예상되는 BufferedImage IMG [I] = ImageIO.read (새 파일 (이미지)); letmeknow.java:181 : 불법적 인 표현식 시작 BufferedImage img [i] = ImageIO.read (새 파일 (이미지));

+4

이렇게하기 위해 루프를 만들려고하면 어떻게됩니까? 최선의 시도와 오류 메시지를 보여 주시면 잘못된 일을하는 것에 대해 더 잘 알 수 있습니다. –

답변

5

이 줄은 아무 의미하지 않습니다 :

BufferedImage img[i] = ImageIO.read(new File(images)); 

는 선언과 동시에 배열을 사용하려고 시도하는 것으로 나타로서, 그리고 이것은 당신이 배열의 사용에 대한 기본적인 자바 튜토리얼을 검토해야한다고 제안 이 지식 기반은 중요하며 데이터베이스 프로그래밍 또는 Swing GUI 프로그래밍을 시도하기 전에 잘 알려 져야하기 때문입니다.

은 아마도이 문제를 해결 (아마도 더 나은 또는 - ArrayList를) 배열 선언하려면 while 루프 전에 BufferedImage의 의를 다음 루프 내부에 그것을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

// !!! CAVEAT: code not compiled nor tested !!! 

// TOTAL_IMAGE_COUNT is a constant that defines the array size 
// an ArrayList might be better though 
BufferedImage[] myImages = new BufferedImage[TOTAL_IMAGE_COUNT]; 
int i = 0; 
while (rs.next()) { 
    String imagePath = rs.getString("path"); 
    System.out.println(imagePath + "\n"); 
    System.out.println("TESTING - READING IMAGE"); 

    myImages[i] = ImageIO.read(new File(imagePath)); 
    imglab[i] = new JLabel(new ImageIcon(myImages[i])); 
    imgPanel[i]= new JPanel(); 
    imgPanel[i].add(imglab[i]); 
    loadcard.add(imgPanel[i], i);  
    i++;     
}//EndWhile 

모든 작업은 CardLayout에 JPanels를 추가하는 경우에 필요하지 않습니다. 그리고 이미지 파일 경로를 이미지 자체가 아닌 데이터베이스에 저장한다는 점이 다소 이상하게 보입니다. 이미지 파일 이름이 너무 작아서 데이터베이스가 필요하지 않은 것 같습니다. 아마도 다음과 같이 매우 간단한 것이 있습니다 :

String imageLocation = "lmkpackage/images/"; 
    String[] imageNames = {"one", "two", "three", "four", "five"}; 
    String imgExt = ".jpg"; 

    int count = 1; 

    for (String imageName : imageNames) { 
    String imagePath = imageLocation + imageName + imgExt; 
    BufferedImage img = ImageIO.read(new File(imagePath)); 
    ImageIcon icon = new ImageIcon(img); 
    JLabel label = new JLabel(icon); 
    loadcard.add(label, String.valueOf(count)); 
    count++; 
    } 
+1

스윙과 JDBC를 사용하기 전에 기본적인 것들을 배우기위한 +1. –

+0

어디에서나 온라인으로 읽었습니다. BLOB 파일로 이미지를 저장하는 대신 이미지 경로를 저장하는 것이 좋습니다. 나는 여기가 아주 간단하다는 것을 알고 있지만, 이것보다 어플리케이션에 더 많은 것이 있기 때문에 데이터베이스가 꼭 필요합니다. 어쨌든, 당신은 매우 도움이되었습니다. 고맙습니다! – Peddler

+0

@Peddler : 천만에요. 다시 말하지만, 저는 데이터베이스 전문가가 아니므로 데이터베이스 기반의 특정 권장 사항을 많은 양의 소금으로 가져와야합니다! –

관련 문제