![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
На эту тему я нашёл вот этот топик:
http://forum.vingrad.ru/index.php?showtopi...=1&hl=jlist но это не совсем то. Мне нужно создать списокс картинками и надписями, но так что бы он был динамичен. то есть нужно каким то образом воспользоваться DefaulListModel. но я не могу догнать как... |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Что ты подразумеваешь под динамичностью?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Возможность добовлять и убирать элементы.
|
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Это никак не привязано к отрисовке элементов. За отрисовку отвечает рендерер, за содержимое - модель. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Веть модел должна рендеру "сказать" как отрисовываться... |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Отнюдь. Модель про это ничего не знает.
Так ты пробовал делать удаление? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Я расскажу что я делал обычно с JList:
Таким образом в список выдаются полные пути фаилов. Теперь... Нужно всё тоже самое но вместо путей фаилов нужны сгенерированные из них иконки (на это функция уже работает) и название фаила. |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Тогда бери пример из топика по твоей ссылке - и вперед!
Модель там не затрагивается. http://forum.vingrad.ru/index.php?showtopi...st&p=688603 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Ну как ты видишь это то что я и сделал.
Но у меня чего то не сошлось... Добавлено @ 16:25 И ещё одно: Сказать тебе честно, я не совсем понимаю логику этого примера. Так что просто подогнал как есть и соответственно не заработало. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Я только одно совсем не понял.
В моём случае, кому я должен переделывать "Rednderer" JList или ListModel? |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Рендерер.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Lamer George,
Извини, но я не понял твоего ответа... |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
ShurikA, здесь несложная логика.
Есть компонент JList. Этот компонент агрегирует объект реализующий интерфейс ListCellRenderer или наследованный от javax.swing.DefaultListCellRenderer. DefaultListCellRenderer тоже релизует интерфейс ListCellRenderer и обладает его реализацией, так сказать, по умолчанию. Так вот, ты можешь написать свой класс, который будет реализовывать интерфейс ListCellRenderer. Создать объект этого класса и передать (установить) его объекту JList. JList когда захочет перерисовать свой элементы, обратится к агрегированному в нем ListCellRenderer-у, и вызовет его метод: public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus). А твой код, в зависимости от переданных в метод параметров, вернет ему компонент, который и будет прорисован в качестве элемента JList. Это сообщение отредактировал(а) MoonCat - 19.5.2006, 11:54 |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Написал я вот так:
как результат: 1. Картинка отображается. 2. Текст нет. 3. Когда пытаюсь отметить, ничего не происходит. |
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Тоже самое
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Выводи отладочную информацию на экран, проверь не пустое ли имя, попробуй создать компонент передавая его конструктору картину и имя.
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Всё проверял, всё правильно.
Прото не отображается. |
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
LSD
Я пока сделал другим путём. Допишу покажу. Добавлено @ 17:26 Ещё вопрос связан с тем же: Как заставить JLabel высвечивать текст в несколко строк? |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 23 Всего: 54 |
Самое простое - HTML в качестве текста. -------------------- ![]() ![]() |
|||
|
||||
| ShurikA |
|
||||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Сделал, Работает!!!
но вот с такой бедой:
Что это и как с этом бороться? В лист я пихаю вот такие элементы:
ImgJLabel :
|
||||||
|
|||||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Это означает, что куча (динамическая память) выделенная под твою JVM истощилась. Чтобы подобное не повторилось следует выделить JVM больше памяти. Запускай JVM с ключом -XmxZZZm, где ZZZ - необходимое количество памяти. например: java - jar -Xmx256m MyProgram.jar Так ты разрешишь JVM использовать до 256 мегабайт ценной памяти... Это сообщение отредактировал(а) MoonCat - 20.5.2006, 22:17 |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
А что если это апплет который запускаетя не у меня
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Можно ли как то это обойти? Или увеличить эту память OnLine?
Думаю что это происходит из за масштабирования картинок в иконки. Я это делаю так:
Какие ещё способы есть, поэкономнее? |
|||
|
||||
| ShurikA |
|
||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Решил проблемму памяти тем что каждый раз после прорисовки оменьшенной картинки, то есть вот тут:
в ручную освобождаю память, вот так:
всё работает, не затыкаеться, но дико медленно. Каждый раз кода хочу отметить элемент или прокрутить список забиваеся 97% проца |
||||
|
|||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Значит, стоит пересмотреть подход. Например, уменьшить картинки один раз, и хранить их уже в обработанном виде. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Ты масштабируешь иконки прямо в методе paint(), удивительно что у тебя вообще список отрисовывается.
Сделай так: - создаешь объект FileThumbnail
- при открытии директории создаешь FileThumbnail для всех картинок в папке - заносишь сгенерированные FileThumbnail в JList -------------------- 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
||||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Зато один раз. Как вариант, можно генерировать новые картинки по необходимости, динамически. Т.е. проверяешь, есть ли для данного файла уже сгенерированная картинка, если есть - берешь готовую, если нет - создаешь. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
А ты посмотри как работает тот же 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
В таком случае если человек гуляет по всему компу, то в какойто момент точно не хватит памяти... |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Прекрасная идея, я на самом деле в начале хотел сделалть именно так. Но так и не понял как это сделать? Я же пользуюсь CellRenderer. А он вузывается не зависимо от меня, и как я на фоне работы к нему подбираюсь что бы подгружать превюшки? Потому как теоретический всё понятно: 1. Создать список с дефолтовыми иконами. 2. Передать этот же список потоку который в своё время, не мешая пользователю, будет эти иконы менять на превьюшки. Только при таком построении которое у меня я не имею представления как это сделать |
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Я конеч попробыю, но честно тебе сказать я не совсем понял как?
Извини за тормознутость... Добавлено @ 22:26 Неужели ты хочешь сказать что нужно сделать столько потоков сколько и иконок? Если делать непосредственно в модели? |
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Короче говоря так и есть... Столько потоков сколько фаилов...
|
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
а да, стормозил.
Спасибо, буду пробовать... Добавлено @ 23:27 На сколько я понимаю, если сделать так как ты показал не надо перекапывать CellRenderer, а просто оставить его дефолтом. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
LSD,
Сделал по твоей подсказке: Работает, доже н плохо. Но, такое ощущение что поток не автономный. То есть пока не переделываются все превьюшки прога не продолжает работать. Вот код, покопай если не лень. Присоединённый файл ( Кол-во скачиваний: 3 )
OctopusUploaderV31.zip 48,68 Kb |
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Только не пугайся, там много бардак и много всякого не нужного хлама..
С thread.start() работает Спасибо!!!! |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Всё таки до сих пор есть проблемма с памятью.
Если долго работать с апплетом |
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Это дело проще а С++ написать... Спасибо!!! Как тебе вообще общее впечатление от проекта? Это мой первый на Джаве. Имею в виду что надо бы изменить в моём подходе? потому как то что надо это точно... |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |