Я создал пользовательский объект под названием FileTypeпользовательский объект в ArrayList поискового
import javax.swing.ImageIcon;
class FileType
{
private int index;
private String type;
private String extension;
private String description;
ImageIcon icon;
public FileType(int index, String type, String extension, String description, String icon)
{
this.index = index;
this.type = type;
this.extension = extension;
this.description = description;
this.icon = Utils.createImageIcon(icon);
}
public int getIndex()
{
return index;
}
public String getType()
{
return type;
}
public String getExtension()
{
return extension;
}
public String getDescription()
{
return description;
}
public ImageIcon getIcon()
{
return icon;
}
}
EDIT: Я также создал класс FileList
import java.util.AbstractList;
import java.util.ArrayList;
public class FileList extends AbstractList
{
private ArrayList<FileType> fileList;
public FileList()
{
}
public void add(int index, String type, String extension, String description, String icon)
{
FileType data = new FileType(index, type, extension, description, icon);
if (!fileList.contains(data))
{
fileList.add(data);
}
}
@Override
public Object get(int index)
{
return fileList.toArray()[index];
}
@Override
public int size()
{
return fileList.size();
}
}
Теперь я хочу, чтобы создавать объекты, такие как
- «1», «html», «ASCII HTML-файлы», «images/html.png»
- «2 », "HTML", "Bootstrap HTML Files", "картинки/html.png"
Теперь я потерян, потому что я хочу сказать, что-то вроде:
list.findelementbytype ("HTML") ; который будет возвращать объект FileType, который я мог бы получить и получить остальные значения/атрибуты.
Am i на правильном пути или я делаю это неправильно? Это для File Chooser, который я пишу, и я хотел иметь все соответствующие данные в одном объекте. Больше ОО, спасибо!
РЕШЕНИЕ
Тип файла класса, который создает каждый элемент данных.
import javax.swing.ImageIcon;
class FileType
{
private int index;
private String search;
private String type;
private String extension;
private String description;
ImageIcon icon;
public FileType(int index, String search, String type, String extension, String description, String icon)
{
this.index = index;
this.search = search;
this.type = type;
this.extension = extension;
this.description = description;
this.icon = Utils.createImageIcon(icon);
}
public int getIndex()
{
return index;
}
public String getSearch()
{
return search;
}
public String getType()
{
return type;
}
public String getExtension()
{
return extension;
}
public String getDescription()
{
return description;
}
public ImageIcon getIcon()
{
return icon;
}
}
Пользовательский объект ArrayList, который хранит данные.
import java.util.AbstractList;
import java.util.ArrayList;
import javax.swing.ImageIcon;
public class FileList extends AbstractList
{
private ArrayList<FileType> fileList;
public FileList()
{
fileList = new ArrayList<FileType>();
}
public void add(String search, String type, String extension, String description, String icon)
{
FileType data = new FileType(fileList.size(), search, type, extension, description, icon);
if (!fileList.contains(data))
{
fileList.add(data);
}
}
@Override
public Object get(int index)
{
return fileList.toArray()[index];
}
public int getIndex(String search)
{
for (FileType obj : fileList)
{
if ((obj.getSearch()).equalsIgnoreCase(search))
return obj.getIndex();
}
return -1;
}
public String getType(String search)
{
for (FileType obj : fileList)
{
if ((obj.getSearch()).equalsIgnoreCase(search))
return obj.getType();
}
return "";
}
public String getExtension(int index)
{
for (FileType obj : fileList)
{
if (obj.getIndex() == index)
return obj.getExtension();
}
return "";
}
public String getExtension(String search)
{
for (FileType obj : fileList)
{
if ((obj.getSearch()).equalsIgnoreCase(search))
return obj.getExtension();
}
return "";
}
public String getDescription(String search)
{
for (FileType obj : fileList)
{
if ((obj.getSearch()).equalsIgnoreCase(search))
return obj.getDescription();
}
return "";
}
public ImageIcon getIcon(String search)
{
for (FileType obj : fileList)
{
if ((obj.getSearch()).equalsIgnoreCase(search))
return obj.getIcon();
}
return null;
}
@Override
public int size()
{
return fileList.size();
}
}
И вы могли бы назвать это следующим образом:
FileList list = new FileList();
list.add("html", "random desc html", Utils.html, "ASCII HTML Files", "images/html.png");
list.add("bootstrap.html", "random desc bootstrap", Utils.bootstrap, "Bootstrap HTML Files",
"images/bootstrap.png");
list.add("xml", "random desc xml", Utils.xml, "XML Files", "images/xml.png");
list.add("json", "random desc json", Utils.json, "JSON Files", "images/json.png");
list.add("pdf", "random desc pdf", Utils.pdf, "PDF Documents", "images/pdf.png");
list.add("doc", "random desc doc", Utils.doc, "Google Documents", "images/doc.png");
Эти классы были созданы, чтобы увеличить JFileChooser в более OO способом при добавлении пользовательских фильтров, просмотреть условия и значки.
Я уверен, что это не является оптимальным, когда речь идет о производительности и хэш-карта будет более идеальным выбором, но для моих целей и временных ограничений, это делает работу я хочу :)
Если они будут только для поиска по расширению файла, тогда вы можете поместить все ваши объекты FileType в HashMap, где ключ - это «html», «xml» и т. д. Это упростит поиск. Если, однако, вы ожидаете, что сможете выполнить поиск по идентификатору или расширению или другому полю, вам придется использовать другой способ, возможно, другой класс, чтобы инкапсулировать поведение, доступное для поиска. – pczeus
Я также создаю класс FileList, но я получаю исключение нулевого указателя в методе добавления :( – codeCompiler77
Вы никогда не инициализируете fileList. Измените строку вверху: 'ArrayList fileList = new ArrayList <>();' –
pczeus