如题,谢谢!分不够再加!急等!

解决方案 »

  1.   

    这割不知道能不能做到,从来没想过,
    但是可以这样,下面的方法供参考:
    方法1:提供多个Model
    每个Model中含有不同的选项,根据不同功能需求切换
    方法2:随时根据不同的功能需求更换Model中的选项
    我偏向于方法2
      

  2.   

    我要提供的是,下拉菜单中的项都一样,不能删除,根据条件动态的判断哪些不可选,也就是变成灰色的。就像某个Component被设置disable一样
      

  3.   

    动态的model不可行,因为根据条件动态的判断哪些不可选。但又不得不显示出来。我以往是做WEB的,web实现这个太容易了,难道Swing 就不行?
      

  4.   

    如何做?我覆盖了Model的setSelectItem()方法,可以达到无法选中,但只是结果不选中,那个动作还是能操作。
      

  5.   

    //不一定是重写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;
    }
      

  6.   

    setName?? 这个是什么时候用?干啥用的?不太明白呵呵!
      

  7.   

    ...那只是个例子就是说当你取得到选中的目标的返回值后 
    再去判断
    而不是在选择的时候判断每当你在使用返回值前都用chk()判断下就完了
      

  8.   

    我可能没说明白,我要在ComboBox选择的时候控制,而非选择完了然后弹出错误,这个处理不了。
      

  9.   

    这是我最不想用的方法,所以才过来问,不过看来是没办法了,谢谢!也许除了覆盖JComboBox别无他法了
    钻牛角尖了,不好意思!感谢楼上的各位朋友!
      

  10.   

    一个问题的解决方案有很多种
    看楼主怎么看待了
    我推荐隐藏灰色项
    如果一定要显示灰色项,可以重写ComboBoxUI中的弹出菜单PopuMenu
    但是很麻烦,你试试就知道了
    祝你好运
      

  11.   

    这个???okimport 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();
      }
    }