我正在编写接近完成的密码管理器。我唯一的问题是滚动。将用户添加到列表中时,我正在创建一个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个。
答案 0 :(得分:0)
好的,所以我能够解决它。只需将标签添加到面板的内容窗格而不是框架本身即可。这样我就可以从我的代码中删除其他2个Loops + ArrayLists,这将使其更具可读性。