我在一个JList控件里定义了一个组件模型,并专门写了一个子类继承自JPanel,实现了DefalutListModel接口。在JList里把这个子类设为渲染子类,但我在为这个子类实现鼠标操作时发现所有的鼠标侦听全给JList接收了该怎么办?

解决方案 »

  1.   

    JList接收了很正常啊!
    你可以对JList的监听事件进行判断啊,里面的List项都有一个vlaue,当你选中那个value的话进行判断,感觉没什么难度的!
      

  2.   

    楼主,这样是行不通的,曾经很长一段时间我也在研究那个问题。后回来发现,用JPanel来渲染JList的时候,只是调用的了JPanel的paint()函数来绘制这个这个panel。对于你在JPanel上添加的事件是不会响应的。你可以用2楼给出的方法,给每个JPanel设置一个成员变量 int ID,当选中JList的某一项时,把这项的value  cast成JPanel类型,根据ID来判断选中的是哪个JPanel。祝你好运。
      

  3.   

    DefalutListModel不是接口。
    不是很理解贴主的意思,如果需要单独监听某个list项,可以在鼠标点击的时候判断当前选中的项(JList 包含方法 locationToIndex(Point p)),再根据项设置事件。
      

  4.   

    我想实现的是当鼠标不点击JList,而只是从控件上略过时,JList内的各个JPanel项都能接收鼠标消息并响应,实现的效果就如同鼠标在弹出的菜单上移动时会有高亮条跟随的样子,该如何实现
      

  5.   

    list.getCellBounds(int index1, int index2)获得一个矩形,判断鼠标是否在这个矩形中
      

  6.   

    JList里的组件模型只是用来Paint的,方法都不可用!楼主可以监听JList的鼠标事件,JList有个方法是 int locationToIndex(Point location)  根据鼠标事件的坐标得到是鼠标指向哪个JPane
      

  7.   

    请问我应该重写MouseAdapter类中的哪个方法?我是重写了mouseEntered方法,但当鼠标在JList上移动时发现不会响应,只有当鼠标移出控件再移入时响应,但如果重写了mouseMoved方法后好像没有什么效果
      

  8.   

    我试过了··不能从value上cast成JPanel啊···如何取出Jpanel?