如何从arraylist中获取未通过mouseclicklistener选择的对象?

时间:2015-12-12 22:46:42

标签: java arraylist

我有一个持有jlabels的JLabel []。我在该数组中存储了5个元素,并使用for循环分配了一个mouseClickListener所有这些标签:

JLabel rollHumanLabels[] = new JLabel[5];

 for (int humanLabelCounter = 0; humanLabelCounter < rollHumanLabels.length; humanLabelCounter++) {
        rollHumanLabels[humanLabelCounter] = new JLabel();
        rollHumanLabels[humanLabelCounter].addMouseListener(new MyMouseListener());
                }

我有一个关于鼠标监听器的课程:

public class MyMouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent e){

  }
}

现在我基本上想做的是获取未被选中的JLabel。我尝试了不同的方法,但它们并没有真正起作用。例如。我在mouseClicked方法中写了一堆if语句,如:

if(e.getSource() == rollHumanLabels[0]){//Add it to an an integar of 1 to the arrayList}
if(e.getSource() == rollHumanLabels[1]){//Add it to an integar value of 2 to the rrayList}

然后尝试循环遍历我添加了值的arraylist但是我不知道如何获得那些因为我的逻辑不对而未被选中的那些。有人可以告诉我如何继续这个程序

2 个答案:

答案 0 :(得分:1)

这是做到这一点的几种方法。其中一个创建了一个自己的JLabel实现,您可以在其中保存单击JLabel的信息。它可能看起来像这样。

public class MyJLabel extends JLabel {
    private boolean selected;

    public MyJLabel() {
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                selected = true;
            }
        });
    }

    public boolean isSelected() {
        return selected;
    }
}

然后,如果你想检查哪些标签没有被选中,你只需要循环

for (MyJLabel label : rollHumanLabels) {
    if(!label.isSelected()){
        //do something
    }
}

答案 1 :(得分:0)

如果您真的想使用您提供的逻辑,那么最简单的方法是将JLabel参数添加到MyMouseListener的构造函数中,并以这种方式进行比较:

public class MyMouseListener extends MouseAdapter {

private final JLabel origin;

public MyMouseListener(JLabel origin) {
 this.origin = origin;
}

public void mouseClicked(MouseEvent e){
    //compare to origin
  }
}