JComboBox如何禁止下拉的某一项不可选
时间:2008-08-27 17:01:50
来源:论坛整理 作者: 编辑:chinaitzhe
网友回复:这割不知道能不能做到,从来没想过,
但是可以这样,下面的方法供参考:
方法1:提供多个Model
每个Model中含有不同的选项,根据不同功能需求切换
方法2:随时根据不同的功能需求更换Model中的选项
我偏向于方法2
网友回复:我要提供的是,下拉菜单中的项都一样,不能删除,根据条件动态的判断哪些不可选,也就是变成灰色的。就像某个Component被设置disable一样
网友回复:动态的model不可行,因为根据条件动态的判断哪些不可选。但又不得不显示出来。我以往是做WEB的,web实现这个太容易了,难道Swing 就不行?
网友回复:要灰掉 应该不可能但是实现点击无效应该没问题.
在响应点击的时候判断下是否属于可以点击的目标就是了。这个很容易实现的..
最多再弹出个对话框提示不能选就是了...
网友回复:如何做?我覆盖了Model的setSelectItem()方法,可以达到无法选中,但只是结果不选中,那个动作还是能操作。
网友回复:顺便说一下,请写示例代码,非常感谢!
网友回复://不一定是重写SelectItem..
//可以简单点的
//例如
//选择的item被用到了下面的函数
void setName()
{
String name = getSelectItem;
if(!chk(name))
{
...
}
else
System.out.print("illegal user");
}
//这样的话就不用重写ComboBox
boolean chk(String in)
{
for(int i=0;i <disableName.size;i )//disableName是个动态生成的String[] 用来保存禁用的
{
if(in.equals(disableName[i]))
return true;
}
return false;
}
网友回复:setName?? 这个是什么时候用?干啥用的?不太明白呵呵!
网友回复:...那只是个例子。。。
就是说当你取得到选中的目标的返回值后
再去判断
而不是在选择的时候判断
每当你在使用返回值前都用chk()判断下就完了
网友回复:我可能没说明白,我要在ComboBox选择的时候控制,而非选择完了然后弹出错误,这个处理不了。
网友回复:这是我最不想用的方法,所以才过来问,不过看来是没办法了,谢谢!也许除了覆盖JComboBox别无他法了
钻牛角尖了,不好意思!
感谢楼上的各位朋友!
网友回复:一个问题的解决方案有很多种
看楼主怎么看待了
我推荐隐藏灰色项
如果一定要显示灰色项,可以重写ComboBoxUI中的弹出菜单PopuMenu
但是很麻烦,你试试就知道了
祝你好运
网友回复:非常感谢!结帖!
网友回复:这个???ok
- Java code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2008</p> * * <p>Company: </p> * * @HUQIU * @version 1.0 */ public class TestFrame extends JFrame implements ActionListener { BorderLayout borderLayout1 = new BorderLayout(); JPanel jPanel1 = new JPanel(); String[] input={"a","b","c","d"}; JComboBox jComboBox1 = new JComboBox(input); String[] disableName={"a"};//disableName是个动态生成的String[] 用来保存禁用的 JLabel jLabel1 = new JLabel(); public TestFrame() { try { jbInit(); this.show(); } catch (Exception exception) { exception.printStackTrace(); } } private void jbInit() throws Exception { this.setSize(300,300); getContentPane().setLayout(borderLayout1); jPanel1.setPreferredSize(new Dimension(300, 300)); jLabel1.setText("jLabel1"); this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); jComboBox1.addActionListener(this); jPanel1.add(jComboBox1); jPanel1.add(jLabel1); } public void actionPerformed(ActionEvent e) { JComboBox cb = (JComboBox)e.getSource(); String tmp = (String)cb.getSelectedItem(); if(!chk(tmp)) jLabel1.setText("Select " tmp); else jLabel1.setText("cant select " tmp); } public boolean chk(String in) { for(int i=0;i <disableName.length;i )//disableName是个动态生成的String[] 用来保存禁用的 { if(in.equals(disableName[i])) return true; } return false; } public static void main(String[] args) { TestFrame testframe = new TestFrame(); } }
关键字:
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面