我有一个持有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但是我不知道如何获得那些因为我的逻辑不对而未被选中的那些。有人可以告诉我如何继续这个程序
答案 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
}
}