我要在JTable列表单元格中显示JCheckBox、JTextField等组件。能显示,但无法获得焦点(无法点击、输入)该如何解决?万分感谢。部分代码如下:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (column != 0)
return super.getTableCellRendererComponent(table, value, isSelected, 
hasFocus, row, column);
else {
JTextField jTextField = new JTextField("123456");
return jTextField;
}
}
});

解决方案 »

  1.   

    import javax.swing.JTable;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.*;
    class ATableClass extends JTable {
      public Class getColumnClass(int column) {
        try {
          if (column == 0) {
            return Class.forName("java.lang.Boolean");
          }
          return Class.forName("java.lang.Object");
        }
        catch (ClassNotFoundException ex) {
          ex.printStackTrace();
          return null;
        }
      }
    }
    public class TableExample1 extends JFrame {
      JScrollPane jScrollPane1 = new JScrollPane();
      ATableClass tableOne = new ATableClass();
      DefaultTableModel model  = new DefaultTableModel();
     
      Boolean [] boolArray=new Boolean[] {
          new Boolean(true),
          new Boolean(false),
          new Boolean(true),
          new Boolean(false),
          new Boolean(true),
          new Boolean(false)
      };  public TableExample1() {
        try {
          jbInit();
          tableOne.setModel(model);
          model.addColumn("CbxColumn", boolArray);
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
      public static void main(String[] args) {
        TableExample1 tex = new TableExample1();
        tex.setBounds(10,10,300,200);
        tex.setVisible(true);
      }
      private void jbInit() throws Exception {
        this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
        jScrollPane1.getViewport().add(tableOne, null);
      }
    }
    给个例子
      

  2.   

    import javax.swing.*;
    import java.awt.*;
    import javax.swing.table.*;
    import java.util.EventObject;
    import javax.swing.event.CellEditorListener;/**
    * <p>Title: Gym</p>
    * <p>Description: program snippets for exercise</p>
    * <p>Copyright: Copyright (c) 2004</p>
    * <p>Company: sjallejavamanscomany</p>
    * @author sjalle
    * @version 1.0
    */
    class ATableClass extends JTable {
    public Class getColumnClass(int column) {
    try {
    if (column == 0) {
    return Class.forName("java.lang.Boolean");
    } else if (column == 1) {
    return Class.forName("java.lang.Integer");
    }return Class.forName("java.lang.Object");
    }
    catch (ClassNotFoundException ex) {
    ex.printStackTrace();
    return null;
    }
    }
    }
    public class TableExample1 extends JFrame {
    JScrollPane jScrollPane1 = new JScrollPane();
    ATableClass tableOne = new ATableClass();
    DefaultTableModel model = new DefaultTableModel();
    JCheckBox cbx=new JCheckBox();
    String [] sArray =new String [] {
    "lalala","lala"
    };Integer [] intArray = new Integer[] {
    new Integer(2),
    new Integer(77),
    new Integer(34),
    new Integer(5)
    };
    Boolean [] boolArray=new Boolean[] {
    new Boolean(true),
    new Boolean(false),
    new Boolean(true),
    new Boolean(false),
    new Boolean(true),
    new Boolean(false)
    };public TableExample1() {
    try {
    jbInit();tableOne.setModel(model);
    model.addColumn("CbxColumn", boolArray);
    model.addColumn("IDs", intArray);
    model.addColumn("Names", sArray);
    }
    catch(Exception e) {
    e.printStackTrace();
    }
    }
    public static void main(String[] args) {
    TableExample1 tex = new TableExample1();
    tex.setBounds(10,10,300,200);
    tex.setVisible(true);
    }
    private void jbInit() throws Exception {
    this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
    jScrollPane1.getViewport().add(tableOne, null);
    }
    }
      

  3.   

    有专门获得焦点的接口中有个方法可以的。 ListSelectionListener
      

  4.   

    http://download.oracle.com/javase/tutorial/uiswing/components/table.html
      

  5.   

    问题找到了,JTable的Cell包含两部分Renderer和Editor,应该在TableCellEditor接口中绘制就可以了 ,谢谢各位。