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 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面