怎么把JList里面的部分内容变成不可选 各位,我今天遇到一个问题,我有一个JList,里面有一些选项,由于用户的等级原因,有些高等级用户选中的选项,低等级用户只能看和修改没有被高级用户选过的,其他的不能修改,也就是说我要根据不同条件,disable这个JList里面的部分内容,希望得到高手的指点,谢谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 针对不同等级的用户向JList中放入指定的项就可以了啊。没必要让人家能看到但又不能点击啊。 楼上的方法可行。如果非要这种效果,可以通过自己实现ListCellRenderer和ListSelectionModel接口 应该实现ListCellRenderer,至于SelectionModel就不需要实现了。如果不可选,比如可以使用 extends JLabel implements CellRenderer,那么没有权限可以通过构造相应的Beans,设置enabled属性为false,那么renderer中获取这个属性进行绘制。 实现ListCellRenderer是为了实现外观上的功能,就是点击某个不可选的选项,该选项颜色不会变化,即不会被标记为已选择的状态。而实际上现在这个选项已经被选择了,还是可以对它进行一些操作。实现ListSelectionModel就是为了物理上也让它不能选择,比如选择了某个不能选的选项后就置当前选择的下标为0等等。 又想了想,只用ListCellRenderer也可以实现这个功能。不过当读取当前选择的下标时就要进行一些逻辑判断,如果该选项不可以选则需要提示重新选择等等。 JList好像可以实现过滤器………… 还是不行呢,这是我的做法 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变空了,怎么回事呢。 这次可以拿到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; } }哪个给点修改意见,谢谢 事件触发value值改变,然后调用repaintrepaint触发Renderer,Renderer根据value变重新绘制 能详细点吗,我需要的是当这个dialog 被load的时候,有些已经被高级用户选中的就要disable,其他的就是可以选择的。 我们小组要做项目,给点建设性的意见大虾们 myeclipse内部窗口的关闭按钮不能用了 新手学JAVA问题 JAVA图片操作颜色失真 java源代码介绍几个好点的网站下载啊,主要用于学习,小例子小程序。 关于调用的问题 讨论:如何实现在线编辑公式(讨论者有分) LINUX下的Jbuilder6企业版 给jsp页面传值,如何动态的给img中的src赋值 Java 8 Stream 之 short-circuiting 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变重新绘制