我正在做一个在线的考试系统,基于局域网的,我想用一个Table来答题,就是显示两列,一列显示题目,另一列
用来答题,比如,选择题和判断题另一列添加的控件为单选框,而填空题,问答题就添加文本框,和文本域。
这样,对于Table的那一列来说,每行添加的控件就不一样了。现在不知道怎么添加。希望大大们能帮我下
 我新建了一个model 继承AbstractTableModel,我现在是在model里面的getValueAt()方法里面将单选框之类的控件返回
,但是这样不能实现,它调用的是这个控件的toString()方法。
  本人初用table,希望能帮帮俺啦急

解决方案 »

  1.   

    需要定义 defaulttable 如private javax.swing.table.DefaultTableModel defaulttable1 = new javax.swing.table.DefaultTableModel();然后定义 table:private javax.swing.JLabel jLabel1;jTable1 = new javax.swing.JTable(defaulttable1);你用这个 defaulttable1 试试就行了
      

  2.   

    是我定义一个MODEL类继承 DefaultTableModel 来实现?
    是怎么实现的呢? 不太明白。
      

  3.   


    public Class getColumnClass(int c) {
    return getValueAt(0, c).getClass();
    }
      

  4.   

    办法1、
    public class TableModel extends DefaultTableModel {
    JTable table = null;
    public TableModel(JTable jtable){
    super();
    table = jtable;
    } public boolean isCellEditable(int row, int column) {
    boolean editable =  super.isCellEditable(row, column);
    if(editable)
    {
    TableCellEditor ce= null;
    if(row类型=字符)
    ce = new DefaultCellEditor(new JTextField());
    else if(row类型=Boolean)
    ce = new DefaultCellEditor(new JCheckBox());
    .......//类推
    table.setCellEditor(ce);
    }
    return editable;
    }}
      

  5.   

    因为要求的是第1列,稍微做了点改动
    public class TableModel extends DefaultTableModel {
    JTable table = null; public TableModel(JTable jtable) {
    super();
    table = jtable;
    } public boolean isCellEditable(int row, int column) {
    boolean editable = super.isCellEditable(row, column);
    if (editable) {
    if (column == 1) {
    try {
    TableCellEditor ce = null;
    if(row类型=字符)
    ce = new DefaultCellEditor(new JTextField());
    else if(row类型=Boolean)
    ce = new DefaultCellEditor(new JCheckBox());
    .......//类推
    table.getColumnModel().getColumn(1).setCellEditor(ce);
    } catch (Exception e) {
    e.printStackTrace();
    //设置为不可编辑,或使用默认的编辑器
    }
    }
    }
    return editable;
    }
    }
      

  6.   

    办法2、
    继承DefaultCellEditor或实现TableCellEditor
    重载这个方法
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    if(row行是判断题)
    {
    editorComponent = new JCheckBox();
    ((JCheckBox)editorComponent).setSelected(Boolean.valueOf(value.toString()));
    }else if(row行是文字)
    {
    editorComponent = new JTextField();
    ((JTextField)editorComponent).setText(value.toString());
    }
    return editorComponent;
    }逻辑处理,颜色选中啥的就不仔细写了
      

  7.   

    谢谢,,还是想问一下,方法1的话,是不是设置默认的table呢? 就是我用一个Object[][]来创建table,然后
    isCellEditable(int row, int column) 方法就是根据我给的值来显示不同的控件对吧?我记得默认的boolean
    就是显示的一个选择框。这个在建立table的时候怎么用呢? 初学啊,,不好意思 是新建一个table。然后新建这个
    TableModel 类的对象么?方法2的话,也不太会用。。 能不能给个例子,就是怎么用的例子。 麻烦啦!!!
    还有那个判断row行的类型的时候,这样判断行吗? table.getValueAt(row, column) instanceof String