滚动浏览多个JPanels Java列表

时间:2018-10-09 16:33:21

标签: java list scroll jpanel

我正在编写接近完成的密码管理器。我唯一的问题是滚动。将用户添加到列表中时,我正在创建一个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 :(得分:0)

好的,所以我能够解决它。只需将标签添加到面板的内容窗格而不是框架本身即可。这样我就可以从我的代码中删除其他2个Loops + ArrayLists,这将使其更具可读性。