Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Картинки и надписи в JList. 
:(
    Опции темы
LSD
Дата 21.5.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Цитата(ShurikA @  21.5.2006,  15:37 Найти цитируемый пост)
Это же займёт ворох времени... 

А ты посмотри как работает тот же ACDSee или Проводник в режиме Эскизы страниц, тоже самое. Вначале долгое и утомительное построение превьюшек, и только потом работа. Если хочешь можешь сохранять в директории свой собсвенный Thumbs.db это сделать не сложно, тогда в следующий раз открываться будет быстрее.
Если хочешь работу можно ускорить работу, вначале создав список FileThumbnail без иконок (а лучше с умолчальной иконкой, для каждого типа файлов) и показать его пользователю, а в фоне подгружать превьюшки. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ShurikA
Дата 21.5.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Цитата(Lamer George @  21.5.2006,  14:06 Найти цитируемый пост)
Зато один раз.

Как вариант, можно генерировать новые картинки по необходимости, динамически. Т.е. проверяешь, есть ли для данного файла уже сгенерированная картинка, если есть - берешь готовую, если нет - создаешь. 

В таком случае если человек гуляет по всему компу, то в какойто момент точно не хватит памяти... 


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
ShurikA
Дата 21.5.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Цитата(LSD @  21.5.2006,  15:00 Найти цитируемый пост)
Если хочешь работу можно ускорить работу, вначале создав список FileThumbnail без иконок (а лучше с умолчальной иконкой, для каждого типа файлов) и показать его пользователю, а в фоне подгружать превьюшки.  

Прекрасная идея, я на самом деле в начале хотел сделалть именно так.
Но так и не понял как это сделать? Я же пользуюсь CellRenderer. А он вузывается не зависимо от меня, и как я на фоне работы к нему подбираюсь что бы подгружать превюшки?
Потому как теоретический всё понятно:
1. Создать список с дефолтовыми иконами.
2. Передать этот же список потоку который в своё время, не мешая пользователю, будет эти иконы менять на превьюшки.

Только при таком построении которое у меня я не имею представления как это сделатьsmile 


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 21.5.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



1. создал список с дефолтовыми иконками и передал его модели JList, а еще лучше чтобы это выполнялось непосредсвенно в самой модели
2. запустил фоновый Tread по созданию превьюшек
3. процесс генерирует превьюшку для файла и меняет у FileThumbnail иконку, плюс оповещает список что такой-то элемент поменялся ( fireContentsChanged() )
4. все остальное сделает JList и CellRenderer

Добавлено @ 22:19 
Если трудности останутся, то я попробую завтра накидать приблизительный код, который это делает. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ShurikA
Дата 21.5.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Я конеч попробыю, но честно тебе сказать я не совсем понял как?
Извини за тормознутость...

Добавлено @ 22:26 
Неужели ты хочешь сказать что нужно сделать столько потоков сколько и иконок?
Если делать непосредственно в модели? 


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 21.5.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Приблизительно, это выглядит так:
Код
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.ArrayList;

public class ThumbnailListModel extends AbstractListModel
{
  private ArrayList<FileThumbnail> thumbnails;
  private Image defaultImage;

  public ThumbnailListModel(File direcory) throws IOException
  {
    thumbnails = new ArrayList<FileThumbnail>();
    defaultImage = ImageIO.read(new File("default.gif"));
    setDirectory(direcory);
  }

  private void setDirectory(File direcory) throws IOException
  {
    int index = getSize();
    thumbnails.clear();
    fireIntervalRemoved(this, 0, index);

    for(File file : direcory.listFiles())
      thumbnails.add(new FileThumbnail(file, defaultImage));

    fireIntervalAdded(this, 0, thumbnails.size());

    runThumbnailGenration();
  }

  private void runThumbnailGenration()
  {
    Runnable thumbnailGenerator = new Runnable()
    {
      public void run()
      {
        int len = thumbnails.size();
        for(int i = 0; i < len; i++)
        {
          FileThumbnail thumbnail = thumbnails.get(i);
          Image thumbnailImage = null;
          //generate thumbnail
          thumbnail.setIcon(thumbnailImage);
          fireContentsChanged(ThumbnailListModel.this, i , i);
        }
      }
    };

    Thread thread = new Thread(thumbnailGenerator, "ThumbnailGenerator");
    thread.setPriority(Thread.MIN_PRIORITY);
    thread.setDaemon(true);
    thread.run();
  }

  public int getSize()
  {
    return thumbnails.size();
  }

  public Object getElementAt(int index)
  {
    return thumbnails.get(index);
  }

  public static class FileThumbnail
  {
    private Image icon;
    private File file;

    public FileThumbnail(File file, Image icon) throws IOException
    {
      this.file = file;
      this.icon = icon;
    }

    public Image getIcon()
    {
      return icon;
    }

    public void setIcon(Image icon)
    {
      this.icon = icon;
    }

    public File getFile()
    {
      return file;
    }

    public void setFile(File file)
    {
      this.file = file;
    }
  }
}
 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ShurikA
Дата 21.5.2006, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Короче говоря так и есть... Столько потоков сколько фаилов... 


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 21.5.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Поток один. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ShurikA
Дата 21.5.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



а да, стормозил.
Спасибо, буду пробовать...

Добавлено @ 23:27 
На сколько я понимаю, если сделать так как ты показал не надо перекапывать CellRenderer, а просто оставить его дефолтом. 


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
ShurikA
Дата 22.5.2006, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



LSD, 
Сделал по твоей подсказке:
Работает, доже н плохо.
Но, такое ощущение что поток не автономный.
То есть пока не переделываются все превьюшки прога не продолжает работать.
Вот код, покопай если не лень.  smile  

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  OctopusUploaderV31.zip 48,68 Kb


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 22.5.2006, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Цитата(ShurikA @  22.5.2006,  06:58 Найти цитируемый пост)
Работает, доже н плохо.
Но, такое ощущение что поток не автономный.
То есть пока не переделываются все превьюшки прога не продолжает работать.

Угу, ошущение верное smile У меня ошибка в 54 строке, там вместо thread.run(), надо было писать thread.start().

В твоем коде, пока еще не разобрался. Посмотрю чуть попозже. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ShurikA
Дата 23.5.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Только не пугайся, там много бардак и много всякого не нужного хлама..

С thread.start() работает smile
Спасибо!!!! 


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
ShurikA
Дата 23.5.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Всё таки до сих пор есть проблемма с памятью.
Если долго работать с апплетом  smile  


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 23.5.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



С кодом я так и не разобрался, много классов и называются совсем неочевидно (типа: FileListModel на самом деле List, а не модель).

Я обнаружил, что если использовать Image.getScaledInstance(), то исходное изображение не освобождает память, даже после flush(). Поэтому лучше использовать AffineTransformOp. 
Я накидал примерчик такого JList-а. Директорию с 104 файлами, общим объемом 310Мб, переваривает и занимает около 4 мегов после этого. 

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  Thumbnail.zip 2,75 Kb


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ShurikA
Дата 23.5.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Цитата(LSD @  23.5.2006,  22:07 Найти цитируемый пост)
AffineTransformOp

Это дело проще а С++ написать...
Спасибо!!!
Как тебе вообще общее впечатление от проекта? smile 
Это мой первый на Джаве.
Имею в виду что надо бы изменить в моём подходе? потому как то что надо это точно... 


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0621 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.