在Java中显示数据库中的多个图像
好的,所以我可以从数据库中获取一张图像。我使用它作为在Java中显示数据库中的多个图像,java,database,image,swing,imageicon,Java,Database,Image,Swing,Imageicon,好的,所以我可以从数据库中获取一张图像。我使用它作为JLabel上的ImageIcon返回它 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
JLabel
上的ImageIcon
返回它
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);
但是,我需要对多个图像执行此操作,并将每个JLabel
分配给cardalayout
中的新JPanel
。我知道我需要某种循环,寻找最佳方法的建议
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
while(rs.next()){
images=rs.getString(“路径”);
System.out.println(图像+“\n”);
System.out.println(“测试-读取图像”);
对于(i=0;i<5;i++){
buffereImage img[i]=ImageIO.read(新文件(图像));
imglab[i]=新JLabel(新图像图标(imgIcon[i]);
imgPanel[i]=新的JPanel();
imgPanel[i].add(imglab[i]);
loadcard.add(imgPanel[i],i);
}//结束
}//结束时
我得到的错误是:
letmeknow.java:181:']'应为BuffereImage img[i]=ImageIO.read(新文件(图像));
java:181:表达式buffereImage img[i]=ImageIO.read(新文件(图像))的非法启动 这一行毫无意义:
BufferedImage img[i] = ImageIO.read(new File(images));
由于您似乎试图同时声明和使用一个数组,这建议您应该阅读一篇关于数组使用的基本Java教程,因为这个知识库非常重要,在尝试数据库编程或Swing GUI编程之前,您应该了解它
为了可能解决这个问题,请在while循环之前声明buffereImage的数组(或者更好的是-ArrayList),然后在循环中使用它。例如:
// !!! 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
尽管如果您所做的只是将JPanel添加到CardLayout中,那么可能根本不需要所有这些阵列。我觉得有点奇怪,你把图像文件路径存储在数据库中,而不是图像本身。您的图像文件名似乎微不足道,甚至可能不需要数据库。也许你所需要的只是这样简单的东西:
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++;
}
当您尝试创建一个循环来执行此操作时会发生什么?如果您向我们显示您的最佳尝试和任何错误消息,我们将更好地了解您可能做错了什么。在我联机阅读的所有地方,建议存储映像的路径,而不是将映像存储为BLOB文件。我知道这看起来很简单,但是应用程序不仅仅是这个,所以数据库肯定是必需的。不管怎样,你帮了大忙。谢谢大家!@小贩:不客气。再说一次,我不是数据库专家,所以请接受任何针对数据库的建议!