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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Картинки в JEditorPane, Не воркают :( 
V
    Опции темы
snaker
Дата 13.4.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть Swing-овский JEditorPane с contentType-ом - text/html, в котором динамически изменяется содержимое(HTML код) с помощью jEditorPane.setText();

Трабла в том, что он не хочет отображать картинки  
Код

jEditorPane.setText("<img src=icon.gif>");
 , где icon.gif - файлик из того же каталога, в котором лежат все классы программы.... Вместо той картинки он рисует свою стандартную (типа, тут должна быть картинка но ее нет, как будто-бы неправильно указано имя файла).... 

Подскажите плз, как с этим бороться? Или посоветуйте какой-либо другой метод для отрисовки картинок в тексте в компоненте, содержимое которого, можно динамически менять..


Заранее, спасибо smile 
PM MAIL ICQ   Вверх
Foo
Дата 13.4.2007, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



если навскидку, то может

Код

jEditorPane.setText("<html><img src=icon.gif></html>");


а вообще приведи запскаемый код, чтобы посмореть лучше
--------------------
qip
PM MAIL   Вверх
snaker
Дата 13.4.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Естессно не помогло... smile оно и без тегов <html> прекрасно работает ;)
Я так понимаю, проблема в том, что ему надо подгрузить картинку уже в процессе выполнения программы, для ее отображения...

И еще вопрос до кучи....
Этот jEditorPane помещен в JScrollPane... Как его проскролить на максимум вниз? А то при дабвлениии текста он не автоскролится setAutoScrolls(true) не помогает :(

Это сообщение отредактировал(а) snaker - 13.4.2007, 20:55
PM MAIL ICQ   Вверх
Foo
Дата 13.4.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



по второму вопросу:
Код

pane.scrollRectToVisible()


по первому:
а код ты не можеш запостить? а то влом набивать
--------------------
qip
PM MAIL   Вверх
snaker
Дата 13.4.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Полный код не буду давать, там сам черт ногу сломит, чат делаю )) Начинаю знакомство с Java-ой.... вот надо теперь добавить смайлы... А картинки ну никак не могу вставить в текст...

Вот код только с JEditorPane
Код

import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;


public class JEP extends JFrame{
    JEP() {
         super("   J a v a   C h a t");
         Container c = getContentPane();
         final JEditorPane chw= new JEditorPane();
         chw.setEditable(false);
         chw.setContentType("text/html");
         chw.setText("<html><img src=icon.gif></html>");
         JScrollPane s_chw=new JScrollPane(chw);
         s_chw.setBounds(10,10,460,400);
         setSize(590,580);
         setLocationRelativeTo(null);
         c.setLayout(null);
         c.add(s_chw);
         
           addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {
                      System.exit(0);}});
         }
    
    public static void main(String[] args) throws IOException 
      {
        JEP chat = new JEP(); 
        chat.setVisible(true);
      }
}


Сеньки за подсказку.. попробую scrollRectToVisible()
PM MAIL ICQ   Вверх
Foo
Дата 14.4.2007, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

chw.setText("<html><img src='file:icon.gif'></html>");

--------------------
qip
PM MAIL   Вверх
snaker
Дата 14.4.2007, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хаа! Класс, никогда б не подумал smile Огромное спасибо!
PM MAIL ICQ   Вверх
snaker
Дата 14.4.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Таксь... возникла новая трабла... Как я раньше говорил.. это у меня чат... Так вот.. сделал нормальное распознавание смайлов и замену их на соответствующий тег <img src=""> но, т.к. в EditorPane при каждом сообщении грузится новый html код со всеми сообщениями, а КАЖДАЯ картинка подгружается из файла... то уже при десятке-другом смайлов они начинают тупить с подгрузкой...причем довольно сильно...

Что можете посоветовать? Мож какой-нить другой компонент заюзать, где можно было бы посреди текста вставлять картинки, заранее подгруженные в память  smile 
PM MAIL ICQ   Вверх
Foo
Дата 18.4.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



кэшировать рисунки
--------------------
qip
PM MAIL   Вверх
snaker
Дата 18.4.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хе, было б неплохо... Но как это реализовать? Или это уже реализовали за меня?   smile 
PM MAIL ICQ   Вверх
snaker
  Дата 21.4.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Выходит не видать мне смайлов в чате? smile  smile 
PM MAIL ICQ   Вверх
Foo
Дата 22.4.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



если ты сам не можеш написать кэш, тогда скорее всего да, не видать
--------------------
qip
PM MAIL   Вверх
snaker
Дата 22.4.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Та пробовал уже JTextPane.insertComponent(new JLabel(smilepic));  
Но дело в том, что всталяет то он нормально.. но когда мне приходится обновлять текст JTextPane.setText("asdsadasdasd");   то картинки, естессно, пропадают... точнее, насколько я понимаю... компоненты остаются потомками моей текстпанельки, но просто исчезают...

 smile 

Это сообщение отредактировал(а) snaker - 22.4.2007, 14:29
PM MAIL ICQ   Вверх
Foo
Дата 22.4.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



покажи код
--------------------
qip
PM MAIL   Вверх
snaker
Дата 22.4.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Итак.. текст а в нем картинка..... Если убрать комментарий, то картинка пропадает....
Код

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;


public class TPane extends JFrame{
    TPane() {
         
         Container c = getContentPane();
         final JTextPane chw= new JTextPane();
         chw.setEditable(false);
         chw.setText("Sample text");
         chw.setCaretPosition(7);
         chw.insertComponent(new JLabel(new ImageIcon("a.png")));
         //chw.setText("Sample text");
         JScrollPane s_chw=new JScrollPane(chw);
         c.add(s_chw,BorderLayout.CENTER);
         setSize(420, 420);
         
           addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                      System.exit(0);}});
         }
    
    public static void main(String[] args) throws IOException 
      {
        TPane win = new TPane(); 
        win.setVisible(true);
      }

}



Как вариант, можно было бы, по идее, добавлать в поле сообщений каждое сообщение в виде отдельного TextPane-а и текст родительского компонента не менять вовсе.... Но опять же.. манагеры компоновки и связанные с этим траблы... Текстпейны будут вылазить за пределы родительского.... в общем гемора еще больше.... Та и памяти жрать больше тоже будет, если каждое сообщение отдельным TextPane-ом.

Уже моск плавиццо  smile 
PM MAIL ICQ   Вверх
LSD
Дата 22.4.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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   Вверх
snaker
Дата 22.4.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Герои, конечно, не ищут легких путей, но я только начинаю Java учить...

И, чесно говоря, ничего не понял при чем тут протокол, протокол для чего и какой ему еще хэндлер надо smile
PM MAIL ICQ   Вверх
Foo
Дата 23.4.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Стой! ты же вроде писал там чат свой через хтмл? Только у тя там была проблема что смайлы долго грузятся...
Выложи код где они у тя долго грузятся, нужно просто при старте программы подгрузить все картинки в память и не грузить их каждый раз.
--------------------
qip
PM MAIL   Вверх
snaker
Дата 23.4.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот... жмакаем на кнопку и любуемся, как тормозит подгрузка трёхсов смайлов, со второго нажатия еще больше тормоза )

Весь вопрос в том, как вставить туда заранее подгруженную пикчу...
Код

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;


public class TPane extends JFrame{
    TPane() {
         
         Container c = getContentPane();
         final JEditorPane chw= new JEditorPane();
         chw.setEditable(false);
         chw.setContentType("text/html");
         chw.setText("<img src='file:aa.gif'>");
         JScrollPane s_chw=new JScrollPane(chw);
         setSize(800, 400);
         JButton b=new JButton();
         
         class Btn implements ActionListener{

             public void actionPerformed(ActionEvent e) {
              String s="";
                 for(int i=0;i<300;i++)
                  s+="<img src='file:aa.gif'>";
                 chw.setText(s);

             }
              
         }
           addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                      System.exit(0);}});
           b.addActionListener(new Btn());
           c.add(s_chw,BorderLayout.CENTER);
           c.add(b,BorderLayout.EAST);
         }
    
   
    
    public static void main(String[] args) throws IOException 
      {
        TPane win = new TPane(); 
        win.setVisible(true);
      }

}

PM MAIL ICQ   Вверх
Foo
Дата 23.4.2007, 20:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Скорее всего (судя по примерам чатов в инете) тебе, если ты хочеш сделать класный чат, придется рисовать все это дело вместе со смайлами, хотя может я и не прав.

Если не очень крутой, то как альтернативу я тут налабал чтото, посмотри мот покатит. Долго мучился с JEditorPane но так ниче толком не получилось...поэтому сделал подругому. Во всяком случае проблем с тормозами точно не будет, можно делать repaint только для видимой области отображения.

Код

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TPane extends JFrame {
    
    private JPanel output = new JPanel();
    private JScrollPane scroll;
    
    Integer msgNum = 1;
    
    private JButton but = new JButton("Say");
    private String top = "<html>";
    private String bottom = "</br></html>";
    private String smile = "<img src='file:d:\\a.png'>";
    
    public TPane() {
        output.setLayout(new BoxLayout(output, BoxLayout.Y_AXIS));
        JPanel mainPanel = new JPanel(new BorderLayout());
        setSize(400, 200);
        but.addActionListener(new SayListener());
        scroll = new JScrollPane(output);
        mainPanel.add(scroll, BorderLayout.CENTER);
        mainPanel.add(but, BorderLayout.PAGE_END);
        this.setContentPane(mainPanel);
    }

    public static void main(String[] args) throws IOException {
        TPane win = new TPane();
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setVisible(true);
    }
    
    private class SayListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String msg = top + "Test msg #" + msgNum++ + smile + " !!!" + bottom;
            output.add(new JLabel(msg));
            scroll.repaint();
            scroll.validate();
        }
    }
}


надеюсь поможет, или хотябы на мысли новые натолкнет.
--------------------
qip
PM MAIL   Вверх
snaker
Дата 23.4.2007, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Foo, сенкс, что-то подобное я пробовал, лейбл неудобно бикоз однострочный... В общем, буду ковырять в эту сторону  smile 
PM MAIL ICQ   Вверх
Foo
Дата 24.4.2007, 15:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(snaker @  23.4.2007,  22:10 Найти цитируемый пост)
лейбл неудобно бикоз однострочный


кто тебе такое сказал? 
Код

new JLabel("<html>first line<br>second line<br>third line</html>")


--------------------
qip
PM MAIL   Вверх
snaker
Дата 24.4.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ЫЫ.... Реально, туплю smile Уже лучше... теперь только разбить текст на строки перед тем, как вставлять на лейбл.... или можно автоматом переносить как-то на след строку?
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1186 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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