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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Scroll в JPopupMenu, как сделать? 
V
    Опции темы
Asal
Дата 24.3.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго времени суток.

Я опять с вопросом по поводу попап-меню.
Как добавить в попап скрол когда много итемов нем ?
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test extends JFrame {
  private JButton btn = new JButton("Test");
  private JPopupMenu popupMenu = new JPopupMenu("TEST Popup");

  public Test() {
    this.add(btn);
    JMenuItem item;
    for (int i = 0; i < 150; i++) {
      item = new JMenuItem("Item - " + i);
      item.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          btn.setText("Show ");
        }
      });
      popupMenu.add(item);

    }

    btn.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        showPopup();
      }
    });

    btn.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyChar() == KeyEvent.VK_SPACE)
          showPopup();
      }
    });
  }

  public void showPopup() {
    Point point = btn.getLocation();
    popupMenu.show(btn, 0, point.y + btn.getHeight());
  }

  public static void main(String[] args) {
    JFrame frame = new Test();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }

}

пробовал разные варианты  smile, но ничего толкового не получилось подскажите пожалуйста


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


Опытный
**


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

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



Где-то видел в попапе две кнопки, одна находится сверху, другая - снизу и когда на них наводишь, то список прокручивается.
Если кто подскажет как такое сделать, будет шикарно  smile 


--------------------
PM MAIL ICQ   Вверх
dorogoyIV
Дата 25.3.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



используй JList
Код

   Object [] data=new Object [100];
   for(int i=0; i < data.length; i++)
   {
    data [i]=new String(i+" ");
   }

   JList jList=new JList(data);
   jList.setVisibleRowCount(5);
   popupMenu.add(new JScrollPane(jList));

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


Опытный
**


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

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



Почти получилось )))
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame {
  private JButton btn = new JButton("Test");
  private JPopupMenu popupMenu = new JPopupMenu("TEST Popup");
  private JList jList = new JList();

  public Test() {
    this.add(btn);
    JMenuItem item;
    for (int i = 0; i < 150; i++) {
      item = new JMenuItem("Item - " + i);
      item.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          btn.setText("Show ");
        }
      });
      jList.add(item);
    }
    jList.setVisibleRowCount(15);
    popupMenu.add(new JScrollPane(jList));

    btn.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        Point point = btn.getLocation();
        popupMenu.show(btn, 0, point.y + btn.getHeight());
      }
    });
  }

  public static void main(String[] args) {
    JFrame frame = new Test();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }
}


теперь показывается попап нужного размера. но абсолютно белый  smile 
что опять не так ?   smile 


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


Эксперт
***


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

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



 smile 
не надо в JList пихать JMenuItem.
посмотри в javadoc - какие конструкторы есть у JList
PM MAIL   Вверх
Asal
Дата 25.3.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Допустим я буду туда пихать String
Код

String[] str = new String[150];
    for (int i = 0; i < 150; i++) {
      str[i] = "Item - " + i;
    }
    jList = new JList(str);
    jList.setVisibleRowCount(15);
    jList.addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) { //тут типо отлавливаем нажатие на элемент списка
        btn.setText("" + e.getLastIndex());
      }
    });
    popupMenu.add(new JScrollPane(jList));

но стесняюсь спросить  smile как попап закрыть ?


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


Эксперт
***


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

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



Код

 public void valueChanged(ListSelectionEvent e)
 {
  btn.setText(jList.getSelectedValue().toString());
  popupMenu.setVisible(false);
 }


еще предвижу вопрос - "как выделять в листе при наведении мыши?"  smile 
такой упрощенный вариант:
Код

  jList.addMouseListener(new MouseAdapter()
  {
   public void mouseEntered(MouseEvent e)
   {
    int height = e.getPoint().y;
    Rectangle r = jList.getCellBounds(0, 0);
    int item_height = (int)r.getHeight();
    int index = height/item_height;
    jList.setSelectedIndex(index);
   }
  });


Это сообщение отредактировал(а) dorogoyIV - 25.3.2008, 15:17
PM MAIL   Вверх
Asal
Дата 25.3.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



dorogoyIV, большое спасибо за помощь  smile 
про
Код

popupMenu.setVisible(false);

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

P.S.
Цитата(dorogoyIV @  25.3.2008,  15:09 Найти цитируемый пост)
такой упрощенный вариант:

спасибо  smile я решил без этого сделать



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


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

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