假设我现在有一个jtable如下:
编号   姓名         省份     城市
1      datalover    湖北     武汉
2      sunlover     云南     昆明
问题:现在我要编辑这个表的城市属性,如果是 湖北 则在城市里面显示下拉列项为:
 麻城
 红安
 黄州
 黄梅如果是云南则显示的是
 红河
 玉溪
 思茅
 曲靖
等请问我要怎么去实现  城市这一列的 celleditor

解决方案 »

  1.   

    加个城市表
    Tab_City
    ------------
    CityID
    CityName
    省份
      

  2.   

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.DefaultCellEditor;
    import javax.swing.JFrame;
    import javax.swing.JComboBox;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;public class tabletest implements ActionListener{
    JComboBox jcb1=null;
    JComboBox jcb2=null;
    String[] s={"湖北","云南"};
    String[][] ss={{"麻城","红安","武汉"},{"昆明","红河","玉溪"}};
    tabletest(){

        String[] header={"省份","城市"};
        jcb2=new   JComboBox();
        jcb1=new JComboBox(s);
        jcb1.addActionListener(this);
        String[][] data={{"",""},{"",""}};
    DefaultTableModel dtm=new DefaultTableModel(data,header);
    JTable jt=new JTable(dtm);
    jt.getColumnModel().getColumn(0).setCellEditor(new   DefaultCellEditor(jcb1));
    jt.getColumnModel().getColumn(1).setCellEditor(new   DefaultCellEditor(jcb2));
    JScrollPane sp=new JScrollPane(jt);
    JFrame f=new JFrame();
    f.getContentPane().add(sp);
    f.setSize(300,300);
    f.setVisible(true);
    }
    public static void main(String[] args) {

    new tabletest();
    }
    public void actionPerformed(ActionEvent e) {
    if(e.getSource()==jcb1){
    jcb2.removeAllItems();
        int len=jcb1.getSelectedIndex();
         System.out.println(len);
        for(int i=0;i<ss[len].length;i++)
        {jcb2.addItem(ss[len][i]);
        System.out.println(ss[len][i]);
        }
    }
    }}
      

  3.   

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.DefaultCellEditor;
    import javax.swing.JFrame;
    import javax.swing.JComboBox;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;public class tabletest implements ActionListener{
    JComboBox jcb1=null;
    JComboBox jcb2=null;
    String[] s={"湖北","云南"};
    String[][] ss={{"麻城","红安","武汉"},{"昆明","红河","玉溪"}};
    tabletest(){

        String[] header={"省份","城市"};
        jcb2=new   JComboBox();
        jcb1=new JComboBox(s);
        jcb1.addActionListener(this);
        String[][] data={{"",""},{"",""}};
    DefaultTableModel dtm=new DefaultTableModel(data,header);
    JTable jt=new JTable(dtm);
    jt.getColumnModel().getColumn(0).setCellEditor(new   DefaultCellEditor(jcb1));
    jt.getColumnModel().getColumn(1).setCellEditor(new   DefaultCellEditor(jcb2));
    JScrollPane sp=new JScrollPane(jt);
    JFrame f=new JFrame();
    f.getContentPane().add(sp);
    f.setSize(300,300);
    f.setVisible(true);
    }
    public static void main(String[] args) {

    new tabletest();
    }
    public void actionPerformed(ActionEvent e) {
    if(e.getSource()==jcb1){
    jcb2.removeAllItems();
        int len=jcb1.getSelectedIndex();
         System.out.println(len);
        for(int i=0;i<ss[len].length;i++)
        {jcb2.addItem(ss[len][i]);
        System.out.println(ss[len][i]);
        }
    }
    }}