这个程序为什么会发生这种错误呢?Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JPanel cannot be cast to javax.swing.JLabel
奇怪啊,我是按照教程来的,为什么教程可以我不可以呢?
难道是JDK版本问题,不应该啊~~!!!JLabel jl=(JLabel)e.getSource();这一句,是否错误的啊,不能强制转换么~~~我急谢谢各位了  O(∩_∩)O~

解决方案 »

  1.   

    错误的意思是,你将JPANEL转成JLABEL发生错误 e.getSouce()这个是从监听获得源,即你获得的是JPANEL,当然不能强转
      

  2.   


    public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub
    JLabel jl=(JLabel)arg0.getSource();
    jl.setForeground(Color.red);
    }
    这里不可以么?
    能否说明下理由什么的呢?
      

  3.   

    从异常看来,事件源是JPanel组件。你可以在强转之前看一下事件源类型:
    System.out.println(e.getSource().getClass().getSimpleName());
      

  4.   


    THX
    显示的是 JPanel
      

  5.   

    所以你应解决的是,为什么监听是建立(来源)在JPANEL上而不是LABLE上。
      

  6.   


    package com.qq.client.view;
    /**
     * 我的好友列表
     * 
     * 更加深入理解   多线程  !!!!!
     * @author Administrator
     *
     */
    import java.awt.*;import javax.swing.*;import java.awt.event.*;public class QQFriendList extends JFrame implements ActionListener,MouseListener {

    //处理第一张卡片
    JPanel jphy1,jphy2,jphy3;
    JButton jphy_jb1,jphy_jb2,jphy_jb3;
    JScrollPane jsp1;

    //处理第二张卡片 显示陌生人
    JPanel jpmsr1,jpmsr2,jpmsr3;
    JButton jpmsr_jb1,jpmsr_jb2,jpmsr_jb3;
    JScrollPane jsp2;

    //处理第二张卡片 显示黑名单

    //把整个JFrame设置成card布局
    CardLayout cl;
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    QQFriendList fl=new QQFriendList();
    }

    public QQFriendList()
    {
    //处理第一张卡片(显示好友列表)
    jphy_jb1=new JButton("我的好友");
    jphy_jb2=new JButton("陌生人");
    //设置监听
    jphy_jb2.addActionListener(this);

    jphy_jb3=new JButton("黑名单");
    jphy1=new JPanel(new BorderLayout());
    //假定有50个好友
    jphy2=new JPanel(new GridLayout(50,1,4,4));

    //给jphy2,初始化50个好友
    JLabel []jlbs=new JLabel[50];
    for(int i=0;i<jlbs.length;++i)
    {
    jlbs[i]=new JLabel(i+1+"",new ImageIcon("images/mm.jpg"),JLabel.LEFT);
    jphy2.add(jlbs[i]);
    //添加高亮效果
    jphy2.addMouseListener(this);
    }

    jphy3=new JPanel(new GridLayout(2,1));
    //把两个按钮加入到jphy3
    jphy3.add(jphy_jb2);
    jphy3.add(jphy_jb3);

    jsp1=new JScrollPane(jphy2);

    //对jphy1初始化
    jphy1.add(jphy_jb1,"North");
    jphy1.add(jsp1,"Center");
    jphy1.add(jphy3,"South");

    //处理第二张卡片(陌生人)
    jpmsr_jb1=new JButton("我的好友");
    jpmsr_jb1.addActionListener(this);
    jpmsr_jb2=new JButton("陌生人");
    jpmsr_jb3=new JButton("黑名单");
    jpmsr1=new JPanel(new BorderLayout());
    //假定有20个陌生人
    jpmsr2=new JPanel(new GridLayout(20,1,4,4));

    //给jpmsr2,初始化20个好友
    JLabel []jlbs2=new JLabel[20];
    for(int i=0;i<jlbs2.length;++i)
    {
    jlbs2[i]=new JLabel(i+1+"",new ImageIcon("images/mm.jpg"),JLabel.LEFT);
    jpmsr2.add(jlbs2[i]);

    //添加高亮效果

    }

    jpmsr3=new JPanel(new GridLayout(2,1));
    //把两个按钮加入到jphy3
    jpmsr3.add(jpmsr_jb1);
    jpmsr3.add(jpmsr_jb2);

    jsp2=new JScrollPane(jpmsr2);

    //对jpmsr1初始化
    jpmsr1.add(jpmsr3,"North");
    jpmsr1.add(jsp2,"Center");
    jpmsr1.add(jpmsr_jb3,"South");

    //this.add(jphy1,"Center");
    cl=new CardLayout();
    this.setLayout(cl);
    this.add(jphy1,"1");
    this.add(jpmsr1,"2");

    this.setSize(140,400);
    this.setTitle("好友列表");
    this.setLocation(500, 180);
    this.setVisible(true);

    } @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    //如果电解了陌生人按钮,就显示第二张卡片
    if(e.getSource()==jphy_jb2)
    {
    cl.show(this.getContentPane(), "2");
    }else if(e.getSource()==jpmsr_jb1)
    {
    cl.show(this.getContentPane(), "1");
    }
    } @Override
    public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
    //相应用户双击事件,并得到好友的编号
    if(e.getClickCount()==2)
    {
    //得到该好友的编号
    String friendNo=((JLabel)e.getSource()).getText();
    System.out.println("你希望和"+friendNo+"聊天");
    }
    } @Override
    public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
    //添加高亮效果
    //JLabel jl=(JLabel)e.getSource();
    //jl.setForeground(Color.red);
    } @Override
    public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub
    //添加高亮效果
    System.out.println(e.getSource().getClass().getSimpleName()); //JLabel jl=(JLabel)e.getSource();
    //jl.setForeground(Color.black);
    } @Override
    public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub

    } @Override
    public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub

    }
    }
    这是源码呐,就是一个简单的模拟QQ的程序哎~~~
    各位见笑了,我还是一步步按照教程敲出来的 = =
      

  7.   

    看一下你事件怎么绑定的?是绑定在JLabel上的吗?
      

  8.   

      jphy2=new JPanel(new GridLayout(50,1,4,4));        
            //给jphy2,初始化50个好友
            JLabel []jlbs=new JLabel[50];
            for(int i=0;i<jlbs.length;++i)
            {
                jlbs[i]=new JLabel(i+1+"",new ImageIcon("images/mm.jpg"),JLabel.LEFT);
                jphy2.add(jlbs[i]);
                //添加高亮效果
                jphy2.addMouseListener(this);        }
      

  9.   

    很可能是JDK版本的问题么?
     = =
      

  10.   

    不要迷恋教程,教程出错的一大堆,有问题以API为准。话说你看的是神马教程?
      

  11.   


    韩顺平老师的javase视频教程
    - - 
      

  12.   

    教程出错的一大堆,有问题以API为准。话说你看的是神马教程?
      

  13.   

    后来有源码,然后按照源码再run,也有这种错误,我就想着会不会是我的MyEclipse和JDK的版本问题之类的。
    MyEclipse8.5 java则是1.7 = =
      

  14.   


    修改后 JLabel []jlbs2=new JLabel[20];
    for(int i=0;i<jlbs2.length;++i)
    {
    jlbs2[i]=new JLabel(i+1+"",new ImageIcon("images/mm.jpg"),JLabel.LEFT);
    jpmsr2.add(jlbs2[i]);


    //添加高亮效果
    jlbs[i].addMouseListener(this);
    }
    为什么
    System.out.println(e.getSource().getClass().getSimpleName());
    显示的还是 JPanel
      

  15.   

    木啊哈哈哈,谢谢各位了。very  THX好了,我真笨。解决,吃饭上课去喽。 = =
      

  16.   

    //假定有50个好友
            jphy2=new JPanel(new GridLayout(50,1,4,4));
            
            //给jphy2,初始化50个好友
            JLabel []jlbs=new JLabel[50];
            for(int i=0;i<jlbs.length;++i)
            {
                jlbs[i]=new JLabel(i+1+"",new ImageIcon("images/mm.jpg"),JLabel.LEFT);
                jphy2.add(jlbs[i]);
                //添加高亮效果
                jlbs[i].addMouseListener(this);
            }
    应该改这!