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

Поиск:

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


Зануда
***


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

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



Тоже самое 


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


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Выводи отладочную информацию на экран, проверь не пустое ли имя, попробуй создать компонент передавая его конструктору  картину и имя. 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
ShurikA
Дата 20.5.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Всё проверял, всё правильно.
Прото не отображается. 


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


Leprechaun Software Developer
****


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

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



Вот такой код у меня работает:
Код
import java.io.*;
import java.awt.*;
import javax.swing.*;

public class FileThumbCellRenderer extends DefaultListCellRenderer  
{   
  private ImageIcon folderIcon = new ImageIcon("folder.jpg");
  private ImageIcon fileIcon = new ImageIcon("file.jpg");
  
  public FileThumbCellRenderer()    
  { 
  } 

  @Override 
  public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)  
  { 
    File file = (File) value;

    setText(file.getName());

    if(file.isDirectory())
      setIcon(folderIcon);  
    else    
      setIcon(fileIcon);

    if(isSelected)  
      setBorder(BorderFactory.createLineBorder(Color.BLUE, 3));

    return this;    
  } 

  public static void main(String[] args)
  {
    Object[] data = new Object[]{new File("C:\\"), new File("file.jpg"), new File("folder.jpg")};
    JList list = new JList(data);
    list.setCellRenderer(new FileThumbCellRenderer());

    JFrame frame = new JFrame("Tree");
    frame.getContentPane().add(new JScrollPane(list));
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}


Проблема где-то в другом месте. 


--------------------
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
Дата 20.5.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



LSD
Я пока сделал другим путём.
Допишу покажу.

Добавлено @ 17:26 
Ещё вопрос связан с тем же:
Как заставить JLabel высвечивать текст в несколко строк? 


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


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Цитата(ShurikA @ 20.5.2006,  17:18)
Как заставить JLabel высвечивать текст в несколко строк?

Самое простое - HTML в качестве текста. 


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
ShurikA
Дата 20.5.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Сделал, Работает!!!
но вот с такой бедой:
Код

Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space

Что это и как с этом бороться?

В лист я пихаю вот такие элементы:
Код

package octopusuploader;

import javax.swing.*;
import java.io.File;
import java.awt.FlowLayout;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.GridLayout;

/**
 * <p>Title: Octopus Uploader</p>
 *
 * <p>Description: Multi-File Uploader</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: MSHWeb LTD.</p>
 *
 * @author Alex Agulyansky
 * @version 1.0
 */
public class FileIcon
    extends JPanel {
  private JPanel preview;
  private JLabel name;
  private ImgJLabel icon = new ImgJLabel();
  private long fileSizeLimit = 8000000;

  public FileIcon(File f) {
    super(new FlowLayout());
    Dimension dm = new Dimension(93,93);
    this.setPreferredSize(dm);
    this.setMaximumSize(dm);
    this.setMinimumSize(dm);
    this.setBackground(Color.white);
    this.setToolTipText(f.getName());

    preview = new JPanel(new GridLayout(1,1), false);
    dm.setSize(80,80);
    preview.setPreferredSize(dm);
    preview.setMaximumSize(dm);
    preview.setMinimumSize(dm);
    preview.setBackground(Color.white);

    if (f.isDirectory()) {
      icon.setImg(new ImageIcon(getClass().getResource("Images/FOLDER.jpg")).getImage());
    }
    else if(f.isFile())
    {
      String exten = this.getExtension(f);
      if(exten != null)
      {
        if (exten.equals("pdf")) {
          icon.setImg(new ImageIcon(getClass().getResource("Images/PDF.jpg")).getImage());
        }
        else if (exten.equals("psd")) {
          icon.setImg(new ImageIcon(getClass().getResource("Images/PHOTOSHOP.jpg")).
                      getImage());
        }
        else if (exten.equals("tif") ||
                 exten.equals("tiff")) {
          icon.setImg(new ImageIcon(getClass().getResource("Images/TIFF.jpg")).
                      getImage());
        }
        else if (exten.equals("gif") ||
          exten.equals("jpeg") ||
          exten.equals("jpg") ||
          exten.equals("png") ||
          exten.equals("bmp")) {
          if (f.length() < fileSizeLimit || fileSizeLimit == 0) {
            icon.setImg(new ImageIcon(f.getPath()).getImage());
          }
          else
          {
            icon.setImg(new ImageIcon(getClass().getResource("Images/PICS.jpg")).
                      getImage());
          }
        }
      }
    }
    preview.add(icon);

    name = new JLabel(f.getName());

    this.add(preview);
    this.add(name);
  }

  //Get the extension of a file.
  private String getExtension(File f) {
    String ext = null;
    String s = f.getName();
    int i = s.lastIndexOf('.');

    if (i > 0 && i < s.length() - 1) {
      ext = s.substring(i + 1).toLowerCase();
    }
    return ext;
  }

}


ImgJLabel :
Код

package octopusuploader;

import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.Graphics;
import java.awt.Image;

/**
 * <p>Title: Octopus Uploader</p>
 *
 * <p>Description: Multi-File Uploader</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: MSHWeb LTD.</p>
 *
 * @author Alex Agulyansky
 * @version 1.0
 */
public class ImgJLabel extends JLabel {
  private Image img = null;

  public ImgJLabel() {
    super(new ImageIcon(), JLabel.CENTER);
  }

  public void setImg(Image image){
    img = image;
    repaint();
  }

  public void paint(Graphics g){
    if(img != null){
      ImageIcon temp = new ImageIcon(img);
      float ratio;
      int width = temp.getIconWidth();
      int height = temp.getIconHeight();
      temp = null;
      int x, y;

      if (width >= height && width > getWidth()) {
        ratio = (float)height / (float)width;
        width = getWidth();
        height = (int)((float)width * ratio);
      }
      else if (height > width && height > getHeight()) {
        ratio = (float)width/(float)height;
        height = getHeight();
        width = (int)((float)height * ratio);
      }
      x = getWidth() / 2 - width / 2;
      y = getHeight() / 2 - height / 2;

      g.drawImage(img, x, y, width, height, this);
    }
  }


}
 


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


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Цитата(ShurikA @  20.5.2006,  22:52 Найти цитируемый пост)
но вот с такой бедой:
Выделить всёБез подсветки
1:
    
Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space

Что это и как с этом бороться?


Это означает, что куча (динамическая память) выделенная под твою JVM истощилась. 
Чтобы подобное не повторилось следует выделить JVM больше памяти. Запускай JVM с ключом -XmxZZZm, где ZZZ - необходимое количество памяти.

например: java - jar -Xmx256m MyProgram.jar 
Так ты разрешишь JVM использовать до 256 мегабайт ценной памяти...
  

Это сообщение отредактировал(а) MoonCat - 20.5.2006, 22:17


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
ShurikA
Дата 20.5.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



А что если это апплет который запускаетя не у меня  smile  


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


Зануда
***


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

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



Можно ли как то это обойти? Или увеличить эту память OnLine?
Думаю что это происходит из за масштабирования картинок в иконки.
Я это делаю так:
Код

package octopusuploader;

import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.Graphics;
import java.awt.Image;

/**
 * <p>Title: Octopus Uploader</p>
 *
 * <p>Description: Multi-File Uploader</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: MSHWeb LTD.</p>
 *
 * @author Alex Agulyansky
 * @version 1.0
 */
public class ImgJLabel extends JLabel {
  private Image img = null;

  public ImgJLabel() {
    super(new ImageIcon(), JLabel.CENTER);
  }

  public void setImg(Image image){
    img = image;
    repaint();
  }

  public void paint(Graphics g){
    if(img != null){
      ImageIcon temp = new ImageIcon(img);
      float ratio;
      int width = temp.getIconWidth();
      int height = temp.getIconHeight();
      temp = null;
      int x, y;

      if (width >= height && width > getWidth()) {
        ratio = (float)height / (float)width;
        width = getWidth();
        height = (int)((float)width * ratio);
      }
      else if (height > width && height > getHeight()) {
        ratio = (float)width/(float)height;
        height = getHeight();
        width = (int)((float)height * ratio);
      }
      x = getWidth() / 2 - width / 2;
      y = getHeight() / 2 - height / 2;

      g.drawImage(img, x, y, width, height, this);
    }
  }


}


Какие ещё способы есть, поэкономнее? 


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


Зануда
***


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

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



Решил проблемму памяти тем что каждый раз после прорисовки оменьшенной картинки, то есть вот тут:
Код

public void paint(Graphics g){
...
...
тут
}


в ручную освобождаю память, вот так:
Код

img.flush();


всё работает, не затыкаеться, но дико медленно. 
Каждый раз кода хочу отметить элемент или прокрутить список забиваеся 97% проца  smile  


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


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 7
Всего: 151



Цитата(ShurikA @  21.5.2006,  04:23 Найти цитируемый пост)
всё работает, не затыкаеться, но дико медленно. 
Каждый раз кода хочу отметить элемент или прокрутить список забиваеся 97% проца  smile   

Значит, стоит пересмотреть подход. Например, уменьшить картинки один раз, и хранить их уже в обработанном виде. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
LSD
Дата 21.5.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Ты масштабируешь иконки прямо в методе paint(), удивительно что у тебя вообще список отрисовывается.

Сделай так:
- создаешь объект FileThumbnail
Код
public class FileThumbnail
{
  private Image icon;
  private File file;

  public FileThumbnail(File file) throws IOException
  {
    this.file = file;
    icon = ImageIO.read(file);
    icon = icon.getScaledInstance(1, 1, BufferedImage.SCALE_SMOOTH);
    icon.flush();
  }

  public Image getIcon()
  {
    return icon;
  }

  public File getFileName()
  {
    return file;
  }
}

- при открытии директории создаешь 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.
PM MAIL WWW   Вверх
ShurikA
Дата 21.5.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Цитата(LSD @  21.5.2006,  09:52 Найти цитируемый пост)
- при открытии директории создаешь FileThumbnail для всех картинок в папке

Это же займёт ворох времени... 


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


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 7
Всего: 151



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

Зато один раз.

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


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Страницы: (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.0702 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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