怎么把JList里面的部分内容变成不可选

J2EE_ME 2009-08-26 11:29:09
各位,我今天遇到一个问题,我有一个JList,里面有一些选项,由于用户的等级原因,有些高等级用户选中的选项,低等级用户只能看和修改没有被高级用户选过的,其他的不能修改,也就是说我要根据不同条件,disable这个JList里面的部分内容,希望得到高手的指点,谢谢了。
...全文
419 16 打赏 收藏 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodmrning 2009-09-01
  • 打赏
  • 举报
回复
ding!
dz007 2009-09-01
  • 打赏
  • 举报
回复
事件触发value值改变,然后调用repaint
repaint触发Renderer,Renderer根据value变重新绘制
J2EE_ME 2009-09-01
  • 打赏
  • 举报
回复
这次可以拿到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;
}
}

哪个给点修改意见,谢谢
J2EE_ME 2009-09-01
  • 打赏
  • 举报
回复
还是不行呢,这是我的做法

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变空了,怎么回事呢。
J2EE_ME 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chosen0ne 的回复:]
又想了想,只用ListCellRenderer也可以实现这个功能。不过当读取当前选择的下标时就要进行一些逻辑判断,如果该选项不可以选则需要提示重新选择等等。
[/Quote]
谢谢,我先研究一下
J2EE_ME 2009-09-01
  • 打赏
  • 举报
回复
算了,不纠缠在这个问题上了,我和用户探讨修改一下需求,谢谢各位了,结贴。
J2EE_ME 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dz007 的回复:]
事件触发value值改变,然后调用repaint
repaint触发Renderer,Renderer根据value变重新绘制
[/Quote]
能详细点吗,我需要的是当这个dialog 被load的时候,有些已经被高级用户选中的就要disable,其他的就是可以选择的。
monkeyking1987 2009-08-26
  • 打赏
  • 举报
回复
针对不同等级的用户向JList中放入指定的项就可以了啊。没必要让人家能看到但又不能点击啊。
dz007 2009-08-26
  • 打赏
  • 举报
回复
JList好像可以实现过滤器…………
chosen0ne 2009-08-26
  • 打赏
  • 举报
回复
又想了想,只用ListCellRenderer也可以实现这个功能。不过当读取当前选择的下标时就要进行一些逻辑判断,如果该选项不可以选则需要提示重新选择等等。
chosen0ne 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gongfuliang 的回复:]
引用 2 楼 chosen0ne 的回复:
楼上的方法可行。
如果非要这种效果,可以通过自己实现ListCellRenderer和ListSelectionModel接口



应该实现ListCellRenderer,至于SelectionModel就不需要实现了。

如果不可选,比如可以使用 extends JLabel implements CellRenderer,那么没有权限可以通过构造相应的Beans,设置enabled属性为false,那么renderer中获取这个属性进行绘制。
[/Quote]

实现ListCellRenderer是为了实现外观上的功能,就是点击某个不可选的选项,该选项颜色不会变化,即不会被标记为已选择的状态。而实际上现在这个选项已经被选择了,还是可以对它进行一些操作。实现ListSelectionModel就是为了物理上也让它不能选择,比如选择了某个不能选的选项后就置当前选择的下标为0等等。
gongfuliang 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chosen0ne 的回复:]
楼上的方法可行。
如果非要这种效果,可以通过自己实现ListCellRenderer和ListSelectionModel接口

[/Quote]

应该实现ListCellRenderer,至于SelectionModel就不需要实现了。

如果不可选,比如可以使用 extends JLabel implements CellRenderer,那么没有权限可以通过构造相应的Beans,设置enabled属性为false,那么renderer中获取这个属性进行绘制。
J2EE_ME 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chosen0ne 的回复:]
楼上的方法可行。
如果非要这种效果,可以通过自己实现ListCellRenderer和ListSelectionModel接口

[/Quote]

我去找找看,有没有办法实现你说的这两个接口。
J2EE_ME 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 monkeyking1987 的回复:]
针对不同等级的用户向JList中放入指定的项就可以了啊。没必要让人家能看到但又不能点击啊。
[/Quote]

根据用户要求,即使等级不够的用户,也要能看到所有的,因为那些是高级用户给低级用户预先设定的。
沉醉东风0001 2009-08-26
  • 打赏
  • 举报
回复
没见过这样的问题
chosen0ne 2009-08-26
  • 打赏
  • 举报
回复
楼上的方法可行。
如果非要这种效果,可以通过自己实现ListCellRenderer和ListSelectionModel接口

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧