这不是数据库的问题吧.表如下id
ref_id
name
---------------------------------
数据,如
   1 0 中国
   2 0 美国
   3 1 四川
   4 1 山东
   5 3 成都
等等.

解决方案 »

  1.   

    上面是存储国家\省份\城市的数据库表.
    而与jtable相关的表就随便了吧

    kehu(table)
    --------------------
    id
    name   (客户名)
    guojia  
    shengfen
    chengshi等等
      

  2.   

    我写的是通用控件,贴代码没什么,举个简单的例子吧
    JCombobox guo= new JCombobox();
    guo.addActionListener(this);
    JCombobox sheng = new JCombobox();
    shenng.addActionListener(this);
    ...............................
    table.getcolumn(0).setcellEditor(guo);
    table.getcolumn(1).setcellEditor(sheng);........................
    public void actionperformed(ActionEvent e){
      //判断时间并处理
    }/////////////////////////////////
    这儿我只随便写了一点,实际中我自定义了cellEditor.
      

  3.   

    这个问题很简单,跟数据库什么的没关系,主要原因是你不能使用同一个JComboBox的实例作为不同行的绘制器,因为如果是同一个实例的话,那么你修改其中一个引用的值,其他的值也就随之修改了
    所以:
    1、如果是绘制器的话,请在每个TableCellRenderer的getTableCellRendererComponent里new一个来返回。当然,每次new一个非常影响效率,那么折中的方案是用个HashMap什么的把row和TableCellRenderer的对照关系保存起来,用的时候先HashMap.get(row),有就返回,没有则new
    2、编辑器的实例可以是同一个,但请不要使用外部加监听的方式,应该你的CellEditor的getTableCellEditorComponent和TableModel的getValueAt()和setValueAt()方法让Table进行自适应,不要试图用外部监听器来修改TableModel里的值
      

  4.   

    编辑器的实例可以是同一个,但请不要使用外部加监听的方式,应该修改(刚刚忘写这俩字)你的CellEditor的getTableCellEditorComponent和TableModel的getValueAt()和setValueAt()方法让Table进行自适应,不要试图用外部监听器来修改TableModel里的值
      

  5.   

    另外,非常不建议用JComboBox作绘制器,1是影响效率,2是没什么意义,因为绘制器只是显示用的,所以JComboBox和JLabel没什么区别
      

  6.   

    to  relive(六道轮回,无想转生) 
    其实,我就是想用jtable作为输入工具,因为做输入的panel太麻烦了.
    不知你有什么好的方法没有,关于panel界面.
    谢谢,我先试一下 CellRenderer
      

  7.   

    我说的是:“非常不建议用JComboBox作绘制器”,但没说不能作编辑器啊,楼主理解错误,呵呵
    JTable其实挺简单的
    因为没有源码,我简单说说吧
    首先,你的Renderer不要用JComboBox
    其次,把你所有的JComboBox.addActionListener()和JComboBox.addItemListener()去掉
    这样你可能会问,那我在修改完国家后怎么把省份的JComboBox换过来呢?
    OK,我们假设你的国家是第一列,省份是第二列,省份使用了一个JComboBox的CellEditor
    那么省份编辑器可以如下
            public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                JComboBox combobox = //你的省份编辑器
                Object objGuo = table.getModel().getValueAt(row,0);//获得你所在行的国家
                String strGuo = objGuo.toString();
                if(strGuo.equals("中国"))
                {//把中国的省份加入
                    combobox.removeAll();
                    combobox.addItem()......;
                }
                else if(strGuo.equals("USA"))
                {//把美国的省份加入
                    combobox.removeAll();
                    combobox.addItem()......;
                }
                return combobox;
            }
    当然,我只是简单写写,有很多相关处理比如颜色、焦点什么就不详细说了,自己看看DefaultCellEditor的源码
    还有,为了提高效率,可以在省份Editor里保存一个国家属性,每次用的时候先与用的国家比较一下,如果相同就不用removeAll()和addItem()了
      

  8.   

    现在的csdn有点拽,以前Norton防火墙允许他的refer\cookie就行了.现在,允许了也不行,必须关Norton才能发帖,真不知还要设置什么????????????/
      

  9.   

    “另外,我本想在Editor中使用监听器进行存库处理.可是经调试发现,在点击combox后,即执行actionPerformed”一定要用的话就用addItemListener,因为它只响应ItemStateChange另外removeAll和addItem会发出ItemStateChange所以一定要用的话就得为每个国家new一个单独的实例来使用
    class CellEditor{
    private HashMap amap = new HashMap();
    public JComboBox getComboBox(String country){
      JComboBox combobox = (JComboBox)amap.get(country);
      if(combobox==null)
      {
        combobox = new JComboBox();
        //把省份加进去
        combobox.addItemListener(yourlistener);
        amap.put(country,combobox);
      }
      return combobox;
    }
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                Object objGuo = table.getModel().getValueAt(row,0);//获得你所在行的国家
                String strGuo = objGuo.toString();
                JComboBox combobox = getComboBox(strGuo);//你的省份编辑器
                return combobox;
    }
    }
    这么说能明白吧
      

  10.   

    如果你的要求更严格的话,那么JComboBox可以按行来实例化,每行一个新的Instance