为什么我的jTable中第一列的下拉菜单失效呢??package in;import javax.swing.table.*;
import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.util.*;public class MyTable extends JTable {
    
    
    //default constructor
    public MyTable() {
        super();
    }
    
    //constructor to create a table with given number of rows and columns
    public MyTable(int row, int col) {
        super(row, col);
    }
    public MyTable(Object[][] rowData,Object[] columnNames){
        super(rowData,columnNames);
    }
    public void changeSelection(int rowIndex, int columnIndex,boolean toggle, boolean extend){
        super.changeSelection(rowIndex,columnIndex,toggle,extend);
        //cell获得焦点时自动进入编辑状态
        super.editCellAt(rowIndex,columnIndex,null);
        //得到该表格的celleditor
        final CellEditor ce=super.getCellEditor();
        //table失去焦点时自动存储最后cell中的值,防止数据丢失
        this.addFocusListener(new FocusListener(){
            public void focusGained(FocusEvent e) {
            }            public void focusLost(FocusEvent e) {
                ce.stopCellEditing();
            }
        
        });
        
    }
    
    
    public static void main(String[] args){
        JFrame jf=new JFrame();
        MyTable mt=new MyTable(100,2);
        Object[] gender={"男","女"};
mt.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(new JComboBox(gender)));
        JScrollPane js=new JScrollPane(mt);
        jf.getContentPane().add(js,BorderLayout.CENTER);
        jf.setTitle("下拉菜单");
        jf.pack();
        jf.setVisible(true);
        jf.addWindowListener(new WindowAdapter(){
            public void windwoClosing(WindowEvent e){
                System.exit(0);
            }
        });
    }
}

解决方案 »

  1.   

    import javax.swing.table.*;
    import javax.swing.*;import java.awt.*;
    import java.awt.event.*;
    import java.util.*;public class MyTable extends JTable {
        
        
        //default constructor
        public MyTable() {
            super();
        }
        
        //constructor to create a table with given number of rows and columns
        public MyTable(int row, int col) {
            super(row, col);
        }
        public MyTable(Object[][] rowData,Object[] columnNames){
            super(rowData,columnNames);
        }
        public void changeSelection(int rowIndex, int columnIndex,boolean toggle, boolean extend){
            super.changeSelection(rowIndex,columnIndex,toggle,extend);
            //cell获得焦点时自动进入编辑状态
            super.editCellAt(rowIndex,columnIndex,null);
            //得到该表格的celleditor
            final CellEditor ce=super.getCellEditor();
            //table失去焦点时自动存储最后cell中的值,防止数据丢失
            this.addFocusListener(new FocusListener(){
                public void focusGained(FocusEvent e) {
                }            public void focusLost(FocusEvent e) {
    //                ce.stopCellEditing();//打开下拉菜单时,表格会失去焦点,相反焦点会到JComboBox中去
                }
            
            });
            
        }
        
        
        public static void main(String[] args){
            JFrame jf=new JFrame();
            MyTable mt=new MyTable(100,2);
            Object[] gender={"男","女"};
    mt.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(new JComboBox(gender)));
            JScrollPane js=new JScrollPane(mt);
            jf.getContentPane().add(js,BorderLayout.CENTER);
            jf.setTitle("下拉菜单");
            jf.pack();
            jf.setVisible(true);
            jf.addWindowListener(new WindowAdapter(){
                public void windwoClosing(WindowEvent e){
                    System.exit(0);
                }
            });
        }
    }
      

  2.   

    可是那怎么防止JTable的数据丢失啊?就是最后一个输入的数据容易丢失