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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление компонентов в JTextPane, как добавить JButton в JTextPane 
:(
    Опции темы
JulT
Дата 28.9.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вообще есть JTextPane в нем текст,выделяем слово в JTextPane ,при нажатии правой клавиши я сделала выпадающее меню,когда жмем на один из пунктов меню у меня заместь выделенного слова в JTextPane вставляется кнопка с названием этого слова.Таких кнопок получается несколько,на каждую из них я повесила обработчик события.Также,на каждую из этих кнопок я повесила другое выпадающее меню,в котором находится пункт,нажимая на который мне нужно чтобы кнопка удалялась,а на ее место вставлялось слово которое было до этого.Вопрос в следующем:1)как удалить нужную мне кнопку
2) нужно ли хранить все кнопки в отдельном массиве,для того чтобы с каждой в отделности можно было работать
3) где фиксировать координаты кнопки,потому что если не фиксировать,то выпадающая менюшка которая относится к кнопкам всегда вылазит только на последней созданной кнопке
Надеюсь поняли меня,ХЭЛП МИ ПЛИЗ
PM MAIL   Вверх
LSD
Дата 28.9.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



1. Название темы должно отражать ее суть!

2. 
Цитата(JulT @  28.9.2006,  17:21 Найти цитируемый пост)
1)как удалить нужную мне кнопку

textPane.remove(button)

3. 
Цитата(JulT @  28.9.2006,  17:21 Найти цитируемый пост)
2) нужно ли хранить все кнопки в отдельном массиве,для того чтобы с каждой в отделности можно было работать

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

4. 
Цитата(JulT @  28.9.2006,  17:21 Найти цитируемый пост)
3) где фиксировать координаты кнопки,потому что если не фиксировать,то выпадающая менюшка которая относится к кнопкам всегда вылазит только на последней созданной кнопке

Код
Point location = button.getLocation();

Это координаты относительно JTextPane, с помощью класса SwingUtilities их можно сконвертировать в координаты относительно экрана или другого компонента.


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


Шустрый
*


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

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



не удаляет у меня он кнопку,делаю так:
Код

jTextPane2.addMouseListener(new MouseAdapter(){
      public void mouseClicked(MouseEvent e){
                pop=new JPopupMenu();
          if (e.getButton()==MouseEvent.BUTTON3) {
            Point p = e.getPoint();
                    JMenuItem menuItem4 = new JMenuItem("Сделать ключевым словом",new ImageIcon(CreateNewTest.class.getResource("img/l_rename.gif")));
                    pop.add(menuItem4).addActionListener(new ActionListener(){
                             public void actionPerformed(ActionEvent e){
                                    start=jTextPane2.getSelectionStart();
                                    end=jTextPane2.getSelectionEnd();
  button=new JButton(jTextPane2.getSelectedText().trim());
                button.setIcon(new ImageIcon(CreateNewTest.class.getResource("img/l_rename.gif")));
                button.setSize(jTextPane2.getSelectedText().trim().length(),8);
   //  а теперь тут создаю выпадающее меню,для только что созданной кнопки
   button.addMouseListener(new MouseAdapter(){
                  public void mouseClicked(MouseEvent q){
                     //System.out.println("1!!!!!!");
                       pop2=new JPopupMenu();
       if (q.getButton()==MouseEvent.BUTTON3) {
           p3 = q.getPoint();
           JMenuItem menuItem11 = new JMenuItem("Убрать ключевое слово",new ImageIcon(CreateNewTest.class.getResource("img/l_rename.gif")));
           pop2.add(menuItem11).addActionListener(new ActionListener(){
                 public void actionPerformed(ActionEvent s){
                        removeButton(button);
     }
                      });
                  Point location = button.getLocation();
                  pop2.show(button, location.x, location.y);
              }

                  }
                });


    где-то там метод для удаления
  public void  removeButton(JButton b){
        jTextPane2.remove(b);
        jTextPane2.updateUI();
    }

ничего не удаляет,менюшка вылазит не понятно где smile 
                             
PM MAIL   Вверх
LSD
Дата 28.9.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Меню отображается не там где надо потому что когда ты пишешь pop2.show(button, location.x, location.y) - то x, y должны быть смещением относительно button, т.е. что-то типа такого:
Код
popupMenu.show(button, button.getWidth() / 2, button.getHeight() / 2);


А насчет того почему кнопка не удаляется сложно сказать, по идее должна, попробуй модифицировать код так:
Код
public void actionPerformed(ActionEvent s)
{
  System.out.println("Call remove button: " + button.getText());
  removeButton(button);
}



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


Шустрый
*


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

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



Ничего не помагает,есть 2 кнопки,одна называется Кнопка1 ее я создала первой, вторая наз Кнопка2, 
в результате менюшка вылазит только на Кнопке2 и соответственно вывод в консоль постоянно такой:  Call remove button: Кнопка2 smile  smile 

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


Leprechaun Software Developer
****


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

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



Вот и источник проблемы: ты неправильно определяешь с какой кнопкой работать. Попробуй получать нужную кнопку так:
Код
button.addMouseListener(new MouseAdapter()
{
  public void mouseClicked(MouseEvent q)
  {
    final JButton currentButton = (JButton) q.getSource();
    pop2 = new JPopupMenu();
    if(q.getButton() == MouseEvent.BUTTON3)
    {
      p3 = q.getPoint();
      JMenuItem menuItem11 = new JMenuItem("Убрать ключевое слово", new ImageIcon(CreateNewTest.class.getResource("img/l_rename.gif")));
      pop2.add(menuItem11).addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent s)
        {
          removeButton(currentButton);
        }
      });
      pop2.show(currentButton, 1, 1);
    }
  }
}



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


Шустрый
*


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

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



Не удаляется,но в консоли пишет уже разные названия кнопок
PM MAIL   Вверх
LSD
Дата 28.9.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Теперь модифицируй метод removeButton():
Код
public void removeButton(JButton b)
{
  Component[] components = jTextPane2.getComponents();
  for(Component component : components)
  {
    if(component == b)
    {
      System.out.println("jTextPane2 contains button " + b.getText());
      break;
    }
  }
  jTextPane2.remove(b);
}



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


Шустрый
*


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

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



А он мне подчеркивает 
Код

Component component : components 
и говорит что ошибка:
Код

"CreateNewTest.java": Error #: 206 : malformed expression at line 515, column 17

первый раз такую запись for вижу
PM MAIL   Вверх
powerOn
Дата 29.9.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(JulT @  29.9.2006,  12:08 Найти цитируемый пост)
А он мне подчеркивает код :Component component : components .... и говорит что ошибка:


А какая у вас версия Java? Данный код будет работать в Java версии не ниже 1.5...


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

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


Leprechaun Software Developer
****


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

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



Замени:
Код
for(Component component : components)

на
Код
for(int i = 0; i < components.length; i++)


Ты используешь не JDK 1.5?


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


Шустрый
*


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

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



я использую JDK 1.4
Написала так как вы сказали :
Код

  public void removeButton(JButton b){
  Component[] components = jTextPane2.getComponents();
 for(int i = 0; i < components.length; i++){
   Component component= components[i];
    if(component == b){
      System.out.println("jTextPane2 contains button " + b.getText());
      break;
    }
  }
  jTextPane2.remove(b);
}

но все равно не удаляет smile

Добавлено @ 11:27 
чуть не забыла,в консоли ничего не отрабатвается  
Код

System.out.println("jTextPane2 contains button " + b.getText());

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


Leprechaun Software Developer
****


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

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



Значит кнопка не добавлена в jTextPane2. Тут уже надо анализировать весь код, особенно тот место где ты добавляешь кнопку в jTextPane2.


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


Шустрый
*


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

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



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

button=new JButton(jTextPane2.getSelectedText().trim());
                button.setIcon(new ImageIcon(CreateNewTest.class.getResource("img/l_rename.gif")));
                button.setSize(jTextPane2.getSelectedText().trim().length(),8);
                jTextPane2.insertComponent(button);

помогите,не бросайте меня
PM MAIL   Вверх
LSD
Дата 29.9.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Попробуй сделать так:
Код
public static void main(String[] args) throws Exception
{
  JButton button1 = new JButton("My button 1");
  JButton button2 = new JButton("My button 2");
  JTextPane textPane = new JTextPane();
  textPane.setText("Abcd  efg hij klmnop qrst uvw xyz");
  textPane.setCaretPosition(5);
  textPane.insertComponent(button1);
  textPane.setCaretPosition(5);
  textPane.insertComponent(button2);

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

  Thread.sleep(2000);

  textPane.setSelectionStart(4);
  textPane.setSelectionEnd(7);
  textPane.replaceSelection(" ");
}



--------------------
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   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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