各位,我今天遇到一个问题,我有一个JList,里面有一些选项,由于用户的等级原因,有些高等级用户选中的选项,低等级用户只能看和修改没有被高级用户选过的,其他的不能修改,也就是说我要根据不同条件,disable这个JList里面的部分内容,希望得到高手的指点,谢谢了。
解决方案 »
- 请教一个 继承中覆盖方法之后调用super访问父类完全相同的方法 的问题
- 关于TreeSet的小问题,哪位大哥能稍稍注释一下。
- 用java执行外部程序,大家来看看?
- 问大家一个关于InitialContext()里参数的问题
- 这个属于刷新问题么?大家帮忙看看
- 请问apache的xmlbean 2.2支持XPath的轴(axis)和谓词(predicate)功能吗?
- 谁能给我发个JBuider安装包?
- 大哥哥们,怎么在applet里面添加打开一个特定地址的网页的代码啊?
- 我的程序错在哪儿?(新手求助)
- 有没有大佬知道抽象工厂模式在jdk中有哪些实现?
- java日期处理
- Java线程暂停与恢复问题
如果非要这种效果,可以通过自己实现ListCellRenderer和ListSelectionModel接口
应该实现ListCellRenderer,至于SelectionModel就不需要实现了。如果不可选,比如可以使用 extends JLabel implements CellRenderer,那么没有权限可以通过构造相应的Beans,设置enabled属性为false,那么renderer中获取这个属性进行绘制。
实现ListCellRenderer是为了实现外观上的功能,就是点击某个不可选的选项,该选项颜色不会变化,即不会被标记为已选择的状态。而实际上现在这个选项已经被选择了,还是可以对它进行一些操作。实现ListSelectionModel就是为了物理上也让它不能选择,比如选择了某个不能选的选项后就置当前选择的下标为0等等。
// TODO Auto-generated method stub
if(isSelected){
setBackground(Color.BLUE);
setEnabled(false);
setOpaque(true); }
return this;
}
然后在我的JList用
list.setCellRenderer(new mytestclass());
结果我的JList变空了,怎么回事呢。
但是不是我想要的,我想的是在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;
}
}哪个给点修改意见,谢谢
repaint触发Renderer,Renderer根据value变重新绘制