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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTextPane компоненты, получить компоненты 
V
    Опции темы
hail
Дата 8.4.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я уже создавал подобную тему, но там меня больше интересовала позиция компонента, и вот добрался до самих компонентов и был очень удивлен. Вот код:
Код

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class textComp{
    public static void main(String[] arg){
        new TextPane();
    }
}
class TextPane{
    JTextPane textPane = new JTextPane();
    JScrollPane scrollPane = new JScrollPane(textPane);
    JFrame form = new JFrame();
    TextPane(){
        form.add(scrollPane);
        JButton btn = new JButton("btn1");
        JLabel lbl = new JLabel("lbl");
        textPane.insertComponent(btn);
        textPane.insertComponent(lbl);
        textPane.insertComponent(new JButton("button"));
        textPane.insertComponent(new JLabel("label"));
        Component[] cmp = textPane.getComponents();
        for (int i=0; i<textPane.getComponentCount(); i++){
            if(cmp[i] instanceof JButton) System.out.println("Button: "+cmp[i]);
            else    if(cmp[i] instanceof JLabel) System.out.println("Label: "+cmp[i]);
            else System.out.println("Component: "+cmp[i]);

        }
        form.setSize(800,600);
        form.setVisible(true);
        form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

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

Component: javax.swing.text.ComponentView$Invalidator[,0,0,0x0,invalid]
Component: javax.swing.text.ComponentView$Invalidator[,0,0,0x0,invalid]
Component: javax.swing.text.ComponentView$Invalidator[,0,0,0x0,invalid]
Component: javax.swing.text.ComponentView$Invalidator[,0,0,0x0,invalid]

Ну и с такими компонентами дальше работать не получается.
Заранее благодарен за помощь.
PM MAIL   Вверх
RebornCrusader
Дата 9.4.2007, 04:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

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



Вчерась перед сном листал Портянкина "Swing - Эффектные пользовательские интерфейсы", там на эту тему было что-то интересное. Вечером дома гляну, если не забуду. А вообще лучше сам купи купи такую ;)
--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
hail
Дата 9.4.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну буду ждать, а то похоже больше ни где этого нет и ни кто этого не видел, где я уже только не искал
PM MAIL   Вверх
AntonSaburov
Дата 9.4.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Так надо не в форму вставлять а в ее контекстную панель.

form.getContextPane().add(....)

PM MAIL WWW ICQ   Вверх
LSD
Дата 9.4.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


Шустрый
*


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

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



Цитата(AntonSaburov @ 9.4.2007,  12:40)
Так надо не в форму вставлять а в ее контекстную панель.
form.getContextPane().add(....)

Да, я сделал, но проблему это не решило
Цитата(LSD @ 9.4.2007,  14:02)
Посмотри эту тему.

Я смотрел ее раньше, но как ты там и говорил, сериализовать текстовую модель с кнопками, картинками,... не получится (у меня не получилось). Да, сериализация этой радости есть одной из причин этого вопроса. Если я щелкаю на компоненте мышкой то в слушателе e.getComponent() работает безотказно и позицию получить можно и все ок. Я видел пример "имитация щелчка мыши", даже думал перещелкать таким образом всю текстовую область чтоб собрать все компоненты, но выглядит это полным бредом.
А из моего кода видно, что с точки зрения текстовой модели вставленный в нее компонент это такая штука javax.swing.text.ComponentView$Invalidator[,0,0,0x0,invalid] которая хранит только внешний вид компонента по которому нельзя(у меня не получилось) определить что это за компонент, и то он invalid.

Отслеживать позиции компонентов с учетом общего редактирования и возможности удаления самих компонентов из текстовой области, и сохранять их в массив, а потом восстанавливать - ммм, не знаю.

Логично создавать какие-то теги, но хочется работать в режиме "что видишь - то и получишь", а значит теги нужно заменять компонентом, а при сохранении наоборот, а значит нужно получить компоненты из текстовой области smile 

В какую сторону двигаться и как???

Как можно организовать работу с тегами, или что-то подобное?
PM MAIL   Вверх
AntonSaburov
Дата 9.4.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Может тогда лэйаут совсем убрать ?
setLayout(null) - и тогда все координаты абсолютные и "надержные"
PM MAIL WWW ICQ   Вверх
hail
Дата 9.4.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



попробовал, не помогло. Результат тот же,  но в любом случае возвращает только вид компонента, буду терить StyleDocument...
PM MAIL   Вверх
Stjopka
Дата 10.4.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



По-моему тут действительно надо использовать не getComponent, а что-нибудь из StyledDocument. Может быть getCharacterElement(num).
PM MAIL   Вверх
LSD
Дата 11.4.2007, 14:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Код
  public static void main(String[] args)
  {
    JTextPane textPane = new JTextPane();
    textPane.setText("ABC DEF GHI");
    textPane.setSelectionStart(3);
    textPane.setSelectionEnd(4);
    textPane.insertComponent(new JButton("<<>>"));
    textPane.setSelectionStart(7);
    textPane.setSelectionEnd(8);
    textPane.insertComponent(new JButton("<<>>"));

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.getContentPane().add(textPane);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    for(Component component : textPane.getComponents())
    {
      Container container = (Container) component;
      int location = textPane.viewToModel(component.getLocation());
      System.out.println("button = " + container.getComponent(0));
      System.out.println("location = " + location);
    }
  }



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


Шустрый
*


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

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



100% работает супер, все как надо......... спасибо. smile  smile 
PM MAIL   Вверх
LSD
Дата 13.4.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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