本帖最后由 Fafay 于 2010-03-06 12:41:10 编辑

解决方案 »

  1.   

    直接给JCombobox的元素加消息 直接设置对应行的'类别'设置 ,comboBox.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent arg0) {
    // TODO 自动生成方法存根
    //再次加入处理函数 比如设置某个table项的内容 }

    });
      

  2.   

    我把代码发上来,朋友帮我看看,谢谢
    public class TableTest { /**
     * @param args
     */
    private JComboBox jcbc,jcby,jcbm,jcbtype;
    private JButton jbsel,jbprint;
    private JLabel jlss,jlcxt,jly,jlm;
    private JTable jt;
    private DefaultTableModel dtm;
    private JScrollPane jsp;
    private JPanel jpsel,jp;
    private DefaultCellEditor ce,cjtf;
    private TableColumnModel cm;
    private JFrame jf;
    private JTextField jtf;

    TableTest(){

    jpsel = new JPanel();
    jpsel.setLayout(null);
    jpsel.setBackground(new Color(240,240,240));
    c = Calendar.getInstance();
    String[] s = {"姓名","类别","工作天数","日值","金额","津贴","加班费","产量工资","应发","应扣","实发"};
    dtm = new DefaultTableModel(s, 100);
    jt = new JTable(dtm);
    jt.setRowHeight(30);
    cm = jt.getColumnModel();
    setFocusMoveHorizontal(jt);

    String[] type = {"班长","A","B"};
    jcbtype = new JComboBox(type);
    jcbtype.setBorder(BorderFactory.createEtchedBorder());
    ce = new DefaultCellEditor(jcbtype);
    cm.getColumn(1).setCellEditor(ce);

    jt.addKeyListener(new KeyAdapter(){
     public void keyReleased(KeyEvent e){
     if(e.getKeyCode() == KeyEvent.VK_ENTER ||
    e.getKeyCode() == KeyEvent.VK_UP ||
    e.getKeyCode() == KeyEvent.VK_DOWN ||
                        e.getKeyCode() == KeyEvent.VK_LEFT ||  
                        e.getKeyCode() == KeyEvent.VK_RIGHT ){  
    JTable t = (JTable)e.getSource();  
    int row,col;   
                        row = t.getSelectedRow();   
                        col = t.getSelectedColumn();
                        t.editCellAt(row,col);   
                        if(col == 1){                    
                         jcbtype.setPopupVisible(true);
                        
                        }else{
                            JTextField editor = ((JTextField)t.getCellEditor().getTableCellEditorComponent(t,t.getValueAt(row,col),true,row,col));   
                            editor.selectAll();  
                        }
            
     }
     }
    });
    jsp = new JScrollPane(jt);
    jsp.setBorder(BorderFactory.createEtchedBorder());
    jsp.setBounds(5, 5, 980, 400); jpsel.add(jsp);

    jf = new JFrame();
    jf.setSize(1000, 600);

    jf.add(jpsel);

    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } public int[] p(JTable jt){
    int[] i = {jt.getSelectedRow(),jt.getSelectedColumn()};
    return i;
    }

    public static void setFocusMoveHorizontal(JTable table) {
            table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
                    put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "selectNextColumnCell"); }  
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    JFrame.setDefaultLookAndFeelDecorated(true);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    new TableTest();
    }}
      

  3.   

    我把你代码试了下 jt.addKeyListener(new KeyAdapter() {
    public void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_ENTER
    || e.getKeyCode() == KeyEvent.VK_UP
    || e.getKeyCode() == KeyEvent.VK_DOWN
    || e.getKeyCode() == KeyEvent.VK_LEFT
    || e.getKeyCode() == KeyEvent.VK_RIGHT) {
    JTable t = (JTable) e.getSource();
    int row, col;
    row = t.getSelectedRow();
    col = t.getSelectedColumn();
    t.editCellAt(row, col);
    if (col == 0) {  //这里改成0  就没有楼主说的情况了
    jcbtype.setPopupVisible(true); } else {
    JTextField editor = ((JTextField) t.getCellEditor()
    .getTableCellEditorComponent(t,
    t.getValueAt(row, col), true, row, col));
    editor.selectAll();
    } }
    }
    });
      

  4.   

    如果改成0的话,我这儿就一直报错了【Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location】if(col == 1){
          jcbtype.setPopupVisible(true);
    }这段代码:我的本意是当选择的列是第二列(也就是“类别”)的时候,JCombobox中的Item自动展开我想要的效果就是:当用回车或者光标键移动到“类别”这一列时,JCombobox自动展开,然后再直接用光标键移动到JCombobox中的其中某一项,然后按回车选中(比如选中“班长”),同时光标跳入右边的单元格(“工作天数”),且“工作天数”这个单元格进入编辑状态。