java JLabel组事件

importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassDemoimplements... import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Demo implements MouseListener{
public Demo(){
JFrame frame=new JFrame();
Container contentPane=frame.getContentPane();
contentPane.setLayout(new GridLayout(4,1));
JLabel [] cube=new JLabel[4];
for(int i=0;i<4;i++) {
cube[i] = new JLabel(""+i+"");
cube[i].addMouseListener(this);
contentPane.add(cube[i]);
}

frame.pack();
frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){
//当鼠标移到标签上时,返回这个标签在数组中的下标
}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}

public static void main(String[] arg){
new Demo();
}
}
当鼠标移到标签上时,返回这个标签在数组中的下标
展开
 我来答
阿刚炖蛋
2013-11-10 · TA获得超过3004个赞
知道大有可为答主
回答量:1789
采纳率:92%
帮助的人:994万
展开全部

你好!!


这个问题的重点是如何将MouseEvent的事件源与数组中的元素进行匹配。

可以通过两种方式来实现,但都需要修改下代码,既将原来数组的声明放到构造函数外部,这样mouseEntered这个监听器的实现才可以访问你的数组变量。


方式一:

.....
public class Demo implements MouseListener{
    JLabel [] cube;
    public Demo(){
        .....
        cube=new JLabel[4];
        .....
    }
    public void mouseEntered(MouseEvent e){
        //当鼠标移到标签上时,返回这个标签在数组中的下标
        JLabel tmp = (JLabel)e.getSource();
        int index = 0;
        for(int i=0;i<cube.length;i++){
            if(cube[i]==tmp){
                index = i;
            }
        }
        JOptionPane.showMessageDialog(null, "当前标签在数组中的下标为:"+index, "标题",JOptionPane.INFORMATION_MESSAGE););
    }
    .....
}


方法二:使用ArrayList来存放JLabel,通过它的indexOf()直接返回索引

.....
import java.util.ArrayList;         //导入相应的类
public class Demo implements MouseListener{
    ArrayList<JLabel> al;
    public Demo(){
        .....        
        al=new ArrayList<JLabel>();
        for(int i=0;i<4;i++) {
            al.add( new JLabel(""+i*8+"") );
            al.get(i).addMouseListener(this);
            contentPane.add(al.get(i));
        }
        .....    
    }    
    public void mouseEntered(MouseEvent e){        
        //当鼠标移到标签上时,返回这个标签在数组中的下标        
        JLabel tmp = (JLabel)e.getSource();        
        int index = al.indexOf(tmp);        
        JOptionPane.showMessageDialog(null, "当前标签在数组中的下标为:"+index, "标题",JOptionPane.INFORMATION_MESSAGE););    
    }    
    .....
}
百度网友48c937c69
2013-11-10 · TA获得超过3126个赞
知道小有建树答主
回答量:1591
采纳率:0%
帮助的人:787万
展开全部
= = 怎么总有这么奇葩的业务逻辑.
1个比较简单的方法: 在new JLabel的时候给JLabel.setName(数组下标)
然后在事件触发的时候:e.getComponent.getName()就能获得下标了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式