我正在尝试从特定文件夹中读取所有文件名,并尝试在JFrame中创建具有相同名称的多个复选框。因此,如果文件夹中有5个文件,则应用程序应在框架中显示5个复选框。
这是我的代码。
JFrame frame = new JFrame();
File folder = new File("C://Tests");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
} else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
JCheckBox checkbox[i] = new JCheckBox(listOfFiles[i].getName());
}
但我收到错误&#34;类型不匹配:无法从JCheckBox转换为JCheckBox []&#34;。有人可以告诉我,我做错了什么吗?
感谢任何帮助。感谢
答案 0 :(得分:3)
首先定义并初始化数组......
JCheckBox checkbox[] = new JCheckBox[listOfFiles.length];
然后填写它......
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
} else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
checkbox[i] = new JCheckBox(listOfFiles[i].getName());
}
如果您希望以后能够在程序中访问该数组,则需要将该数组设为实例字段...
public class ... {
//...
private JCheckBox checkbox[];
然后在您知道有多少文件时将其初始化...
File[] listOfFiles = folder.listFiles();
checkbox[] = new JCheckBox[listOfFiles.length];
坦率地说,一个更简单的解决方案是使用某种List
,就像ArrayList
一样。有关详细信息,请参阅Collections Trail
答案 1 :(得分:3)
尝试这样的事情。
在循环外声明数组;类似的事情 - &gt; JCheckBox checkbox [] = new JCheckBox [listOfFiles.length]
在循环内部,将复选框实例保留在数组中 - &gt; checkbox [j] = new JCheckBox(listOfFiles [i] .getName());