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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PopupMenu с привязкой к кнопке, плюс исчезновение при смене фокуса 
V
    Опции темы
Asal
Дата 19.3.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день.
Пытался создать кнопку с попАп меню, но наткнуля на камень преткновения.
Кнопку с попАп я создаю следующим образом
Код

import javax.swing.*;
import java.awt.*;
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 item1 = new JMenuItem("Item1");
    item1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btn.setText("Show");
        popupMenu.setVisible(false);
      }
    });
    JMenuItem item2 = new JMenuItem("Item2");
    item2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btn.setText("Show");
        popupMenu.setVisible(false);
      }
    });
    popupMenu.add(item1);
    popupMenu.add(item2);
    btn.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Point point = btn.getLocationOnScreen();
        point.setLocation(point.getX(), point.getY() + btn.getSize().getHeight());
        popupMenu.setLocation(point);
        if (popupMenu.isVisible()) {
          btn.setText("Show");
          popupMenu.setVisible(false);
        } else {
          btn.setText("Hide");
          popupMenu.setVisible(true);
        }
      }
    });
  }

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

Кнопка создается, по нажатию на нее появляется под ней меню, но ...
вот мои камни преткновения;
1. если окно с кнопкой передвинуть, то меню остается на месте. Как привязать меню к кнопке ?
2. Если мышкой щелкнуть по другому элементу окна, то меню должно исчезнуть. Как сделать ?

хотелось бы сделать такую кнопку

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  1.jpg 11,58 Kb


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


Эксперт
***


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

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



Код

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 item1 = new JMenuItem("Item1");
    item1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btn.setText("Show 1");
//        popupMenu.setVisible(false);
      }
    });
    JMenuItem item2 = new JMenuItem("Item2");
    item2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btn.setText("Show 2");
//        popupMenu.setVisible(false);
      }
    });
    popupMenu.add(item1);
    popupMenu.add(item2);

  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);
  }
}



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


Опытный
**


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

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



dorogoyIV спасибо за помощь !!!  smile 

Проблема была в том что я использовал setVisible(true), а надо было show(Component invoker, int x, int y).
поменял setVisible на show и все заработало как надо. Камни преткновения рассосались  smile 

Это сообщение отредактировал(а) Asal - 20.3.2008, 12:05


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


Эксперт
***


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

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



с PopupMenu заморочки постоянно.
такое ощущение, что сановцы просто игнорируют его  smile 
в шестой версии Java сделали трэй с поддержкой awt.PopupMenu  smile 

как то делал JWindow с JPopupMenu, в джаре не хочет работать - а так(вне джара) работает smile 

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


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

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