Прокрутите список нескольких JPanels Java - PullRequest
0 голосов
/ 09 октября 2018

Я пишу почти готовый менеджер паролей.Моя единственная проблема - прокрутка.Когда я добавляю пользователя в свой список, я создаю Jpanel + 2 JLabels.Я хочу, чтобы иметь возможность прокручивать мой список из них.

        public void mouseWheelMoved(MouseWheelEvent e)
          {
            if ((e.getX() > 645) && (e.getX() < 1280))
            {
              int y;
              if (e.getWheelRotation() < 0)
              {
                for (JPanel p : Main.elements)
                {
                  int y = p.getY();
                  if (p == Main.elements.get(0)) {
                    if (Math.max(p.getY(), 60) == p.getY()) {
                      Main.isstuck_panel = true;
                    } else {
                      Main.isstuck_panel = false;
                    }
                  }
                  if (!Main.isstuck_panel) {
                    p.setLocation(p.getX(), p.getY() + e.getScrollAmount() * 2);
                  }
                }
                for (JLabel p : Main.elements_)
                {
                  int y = p.getY();
                  if (p == Main.elements_.get(0)) {
                    if (Math.max(p.getY(), 80) == p.getY()) {
                      Main.isstuck_labelemail = true;
                    } else {
                      Main.isstuck_labelemail = false;
                    }
                  }
                  if (!Main.isstuck_labelemail) {
                    p.setLocation(p.getX(), p.getY() + e.getScrollAmount() * 2);
                  }
                }
                for (JLabel p : Main.elements__)
                {
                  y = p.getY();
                  if (p == Main.elements__.get(0)) {
                    if (Math.max(p.getY(), 60) == p.getY()) {
                      Main.isstuck_labeluser = true;
                    } else {
                      Main.isstuck_labeluser = false;
                    }
                  }
                  if (!Main.isstuck_labeluser) {
                    p.setLocation(p.getX(), p.getY() + e.getScrollAmount() * 2);
                  }
                }
              }
              else
              {
                int x = 0;
                for (JPanel p : Main.elements)
                {
                  int y = p.getY();
                  if (Main.elements.indexOf(p) == Main.elements.size() - 1) {
                    if (Math.min(p.getY() + p.getHeight(), Main.frame.getHeight()) == p.getY() + p.getHeight()) {
                      Main.isstuck_panel = true;
                    } else {
                      Main.isstuck_panel = false;
                    }
                  }
                  if (Main.isstuck_panel) {
                    for (int i = Math.min(p.getY() + 40, Main.frame.getHeight()); i == p.getY() + 40; i++) {
                      p.setLocation(p.getX(), i);
                    }
                  } else {
                    p.setLocation(p.getX(), p.getY() - e.getScrollAmount());
                  }
                  x++;
                }
                for (JLabel p : Main.elements_)
                {
                  int y = p.getY();
                  if (Main.elements_.indexOf(p) == Main.elements_.size() - 1) {
                    if (Math.min(p.getY() - 20 + 40, Main.frame.getHeight()) == p.getY() - 20 + 40) {
                      Main.isstuck_labeluser = true;
                    } else {
                      Main.isstuck_labeluser = false;
                    }
                  }
                  if (Main.isstuck_labeluser) {
                    for (int i = Math.min(p.getY() - 20 + 40, Main.frame.getHeight()); i == p.getY() + 40; i++) {
                      p.setLocation(p.getX(), i);
                    }
                  } else {
                    p.setLocation(p.getX(), p.getY() - e.getScrollAmount());
                  }
                }
                for (JLabel p : Main.elements__)
                {
                  int y = p.getY();
                  if (Main.elements__.indexOf(p) == Main.elements__.size() - 1) {
                    if (Math.min(p.getY() + 40, Main.frame.getHeight()) == p.getY() + 40) {
                      Main.isstuck_labelemail = true;
                    } else {
                      Main.isstuck_labelemail = false;
                    }
                  }
                  if (Main.isstuck_labelemail) {
                    for (int i = Math.min(p.getY() + 40, Main.frame.getHeight()); i == p.getY() + 40; i++) {
                      p.setLocation(p.getX(), i);
                    }
                  } else {
                    p.setLocation(p.getX(), p.getY() - e.getScrollAmount());
                  }
                }
              }
            }
          }

Я знаю, что это не лучший способ сделать это, но это сработало.Но я столкнулся с одной ошибкой: у меня 20 пользователей, но я могу прокрутить только до 19-го.

1 Ответ

0 голосов
/ 10 октября 2018

Хорошо, так что я смог это исправить.Просто добавив метки на панель содержимого панели, а не на сам фрейм.Таким образом, я смог удалить 2 других Loops + ArrayLists из моего кода, что сделает его более читабельным.

...