各位,我今天遇到一个问题,我有一个JList,里面有一些选项,由于用户的等级原因,有些高等级用户选中的选项,低等级用户只能看和修改没有被高级用户选过的,其他的不能修改,也就是说我要根据不同条件,disable这个JList里面的部分内容,希望得到高手的指点,谢谢了。

解决方案 »

  1.   

    针对不同等级的用户向JList中放入指定的项就可以了啊。没必要让人家能看到但又不能点击啊。
      

  2.   

    楼上的方法可行。
    如果非要这种效果,可以通过自己实现ListCellRenderer和ListSelectionModel接口
      

  3.   


    应该实现ListCellRenderer,至于SelectionModel就不需要实现了。如果不可选,比如可以使用 extends JLabel implements CellRenderer,那么没有权限可以通过构造相应的Beans,设置enabled属性为false,那么renderer中获取这个属性进行绘制。
      

  4.   


    实现ListCellRenderer是为了实现外观上的功能,就是点击某个不可选的选项,该选项颜色不会变化,即不会被标记为已选择的状态。而实际上现在这个选项已经被选择了,还是可以对它进行一些操作。实现ListSelectionModel就是为了物理上也让它不能选择,比如选择了某个不能选的选项后就置当前选择的下标为0等等。
      

  5.   

    又想了想,只用ListCellRenderer也可以实现这个功能。不过当读取当前选择的下标时就要进行一些逻辑判断,如果该选项不可以选则需要提示重新选择等等。
      

  6.   

    JList好像可以实现过滤器…………
      

  7.   

    还是不行呢,这是我的做法 class mytestclass extends JLabel implements ListCellRenderer{ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    // TODO Auto-generated method stub
    if(isSelected){
    setBackground(Color.BLUE);
    setEnabled(false);
    setOpaque(true); }
    return this;
    }
    然后在我的JList用
    list.setCellRenderer(new mytestclass());
    结果我的JList变空了,怎么回事呢。
      

  8.   

    这次可以拿到value了
    但是不是我想要的,我想的是在load这个页面的时候的value是disable的,后来选的是enable的 class mytestclass extends JLabel implements ListCellRenderer{ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    // TODO Auto-generated method stub

    String s = value.toString();
            setText(s); if(isSelected){
    setBackground(Color.BLUE);
    setEnabled(false);
    setOpaque(true); }
    return this;
    }
    }哪个给点修改意见,谢谢
      

  9.   

    事件触发value值改变,然后调用repaint
    repaint触发Renderer,Renderer根据value变重新绘制
      

  10.   

    能详细点吗,我需要的是当这个dialog 被load的时候,有些已经被高级用户选中的就要disable,其他的就是可以选择的。