На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела Java FAQ
1. Данный раздел предназначен только для публикации готовых статей, с вопросами обращайтесь в соответствующие подразделы.
2. Все вопросы, связанные с ошибками или неточностями в представленных материалах направляйте модераторам персональным сообщением.
3. Все темы и сообщения в разделе премодерируются. Любое сообщение или тема будут доступны остальным участникам после одобрения модераторами.
Модераторы: dark_barker, wind
  
> Плавно всплывающее меню, JPopupMenu
    ExpandedWrap disabled
      /**
       *
       * Внимание! При использовании данного класса рекомендуется запускать
       * JVM с установленным в {@code true} системным свойством {@code sun.awt.noerasebackground}. Это
       * устранит мерцания части меню, выходящей за пределы окна.
       *
       */
      public class AnimatedPopupMenu extends JPopupMenu {
       
          public AnimatedPopupMenu() {
          }
       
          @Override
          public void show(final Component invoker, final int x, final int y) {
              Thread animatorThread = Executors.defaultThreadFactory().newThread(
                  new Runnable() {
                      public void run() {
                          Dimension preferredSize = getPreferredSize();
                          
                          float ratio = (float) preferredSize.width / (float) preferredSize.height;
                          float w = 0, h = 0;
                              
                          while (true) {
                              final Dimension size = getSize();
       
                              if (w >= preferredSize.width && h >= preferredSize.height) {
                                  break;
                              }
       
                              size.setSize(
                                  w = w + 4,
                                  h = h + 4 / ratio
                              );
       
                              try {
                                  SwingUtilities.invokeAndWait(
                                      new Runnable() {
                                          public void run() {
                                              Window window = SwingUtilities.getWindowAncestor(
                                                  AnimatedPopupMenu.this
                                              );
       
                                              if (window instanceof JWindow
                                                      && window.getClass().getEnclosingClass() == Popup.class) {
                                                  window.setSize(size);
                                              }
                                              else {
                                                  setPopupSize(size);
                                              }
                                          }
                                      }
                                  );
                                  
                                  Thread.sleep(5L);
                              }
                              catch (InterruptedException thrown) {
                                  break;
                              }
                              catch (InvocationTargetException thrown) {
                                  throw new RuntimeException(
                                      thrown.getTargetException()
                                  );
                              }
                          }
                      }
                  }
              );
              
              setSize(0, 0);
              SwingUtilities.invokeLater(
                  new Runnable() {
                      public void run() {
                          AnimatedPopupMenu.super.show(invoker, x, y);
                      }
                  });
       
              animatorThread.start();
          }
       
      }
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0861 ]   [ 17 queries used ]   [ Generated: 17.08.19, 20:50 GMT ]