我试图使用for循环迭代两个列表,但是迭代次数与每个列表中的项目数一样多。
List<String> l = new ArrayList();
l.add("C:/Users/Public/Pictures/Sample Pictures/Koala.jpg");
l.add("E:/IMG_1241.mp4");
Image[] images = new Image[l.size()];
ImageView[] pics = new ImageView[l.size()];
for (final String imageResource : l) {
for (int i = 0; i < l.size(); i++) {
有了以上程序,程序将产生最后4个项目。如果List<String> l
有四个项目,则为16,即4个项目重复4次,如果有三个为9个项目。
我当时在这样的for循环中for (int i = 0, int iL; int iL < l.size(), i < l.size(); iL++, i++) {
思考,但不确定如何解决。
请帮忙。
完整的程序如下所示:
public class TilePaneExample {
public javafx.scene.layout.TilePane listItems() {
List<String> l = new ArrayList();
l.add("C:/Users/Public/Music/Sample Music/Maid with the Flaxen Hair.mp3");
l.add("C:/Users/Public/Videos/Sample Videos/Wildlife.wmv");
l.add("C:/Users/Public/Pictures/Sample Pictures/Koala.jpg");
l.add("C:/Users/Public/Pictures/Sample Pictures/Desert.jpg");
// Pane
javafx.scene.layout.TilePane tilePane = new javafx.scene.layout.TilePane();
tilePane.setHgap(2);
tilePane.setVgap(2);
tilePane.setMinWidth(250);
Image[] images = new Image[l.size()];
ImageView[] pics = new ImageView[l.size()];
for (final String imageResource : l) {
for (int i = 0; i < l.size(); i++) {
final String imageResourceItem = l.get(i);
images[i] = new Image("file:" + "C:/Users/Public/Pictures/Sample Pictures/Lighthouse.jpg");
pics[i] = new ImageView(images[i]);
pics[i].setFitWidth(22);
pics[i].setPreserveRatio(true);
pics[i].setSmooth(true);
pics[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
File f = new File(imageResourceItem);
String absolutePath = f.getAbsolutePath();
if (imageResource.startsWith("file:")) {
absolutePath = absolutePath.replace("\\standAloneDev\\java\\workingDir\\live\\WakiliProject\\file:D:", "");
}
String ext = FilenameUtils.getExtension(absolutePath);
System.out.println("You clicked: " + absolutePath + ". The extension is: " + ext);
try {
Desktop.getDesktop().open(new File(absolutePath));
} catch (IOException ex) {
Logger.getLogger(TilePaneExample.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
tilePane.getChildren().add(pics[i]);
}
}
return tilePane;
}
}
我正在使用Windows 7默认示例文件,因此无需进行过多修改即可正常工作。尝试执行它,您会得到我要完成的事情的图片。
谢谢你。
更新:
该应用程序应该像这样的:有一个形象的每一个环节List l
,l.add("C:/Users/Public/Pictures/Sample Pictures/Desert.jpg");
例如。图像和链接一样多,因此有两个循环。外部循环,for (final String imageResource : l) {
获取链接,内部循环for (int i = 0; i < l.size(); i++) {
创建可点击的图像,单击该图像可打开资源,视频,图片或音乐文件。
您可以通过以下方式进行操作:
public class TilePaneExample {
public javafx.scene.layout.TilePane listItems() {
List<String> l = new ArrayList();
l.add("C:/Users/Public/Music/Sample Music/Maid with the Flaxen Hair.mp3");
l.add("C:/Users/Public/Videos/Sample Videos/Wildlife.wmv");
l.add("C:/Users/Public/Pictures/Sample Pictures/Koala.jpg");
l.add("C:/Users/Public/Pictures/Sample Pictures/Desert.jpg");
// Pane
javafx.scene.layout.TilePane tilePane = new javafx.scene.layout.TilePane();
tilePane.setHgap(2);
tilePane.setVgap(2);
tilePane.setMinWidth(250);
Image[] images = new Image[l.size()];
ImageView[] pics = new ImageView[l.size()];
//for (final String imageResource : l) { // removed first loop
for (int i = 0; i < l.size(); i++) {
final String imageResourceItem = l.get(i);
images[i] = new Image("file:" + "C:/Users/Public/Pictures/Sample Pictures/Lighthouse.jpg");
pics[i] = new ImageView(images[i]);
pics[i].setFitWidth(22);
pics[i].setPreserveRatio(true);
pics[i].setSmooth(true);
pics[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
File f = new File(imageResourceItem);
String absolutePath = f.getAbsolutePath();
if (l.get(i).startsWith("file:")) { // changed the imageResourceItem into l.get(i)
absolutePath = absolutePath.replace("\\standAloneDev\\java\\workingDir\\live\\WakiliProject\\file:D:", "");
}
String ext = FilenameUtils.getExtension(absolutePath);
System.out.println("You clicked: " + absolutePath + ". The extension is: " + ext);
try {
Desktop.getDesktop().open(new File(absolutePath));
} catch (IOException ex) {
Logger.getLogger(TilePaneExample.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
tilePane.getChildren().add(pics[i]);
}
}
return tilePane;
//}
}
没有第一个循环,您仍然可以使用以下命令访问链接:l.get(i)第一个循环在做什么,只是将列表的内容分配给最终的String imageResource,然后将其用于代码中:if (imageResource.startsWith("file:")) { absolutePath = absolutePath.replace("\\standAloneDev\\java\\workingDir\\live\\WakiliProject\\file:D:", ""); }
那么您可以做的很有效,就是删除该第一个循环,而不必为条件运算符使用imageResource,而可以使用l.get(i)。无需通过第一个循环将其分配给String变量。希望这能回答您的问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句