Jtable列中的复选框问题

时间:2009-12-02 09:15:05

标签: java jtable replace jcheckbox

我有一个包含6列的Jtable,其中我在第6列中有复选框。我正在使用setValueAt()和getValueAt()方法将文本输出到JTable。对于相同的Jtable,我有查找,替换和替换所有控件以查找,替换和替换jtable中的所有文本。特定的单元格将被聚焦用于查找文本。特定单元格将被聚焦并用给定文本替换文本。

我的问题是,在用给定文本替换文本时,我会聚焦特定单元格并使用setValueAt()来替换。但是第6列中的复选框被打扰并且文本出现在该列中,如YES或否(对于选中的复选框,我使用了YES和取消选中复选框,我使用了无字符串)。 这是我的示例代码:``

StringTokenizer st1 = new StringTokenizer(trstring1, "\t");//trstring1 is the Jtable string
        for (i = 0; st1.hasMoreTokens(); i++) {
            for (j = 1; j < 6; j++) {
                rowstring = st1.nextToken();
                if (rowstring.contains(findTxt)) {
                    rowstring = rowstring.replace(findTxt, replaceTxt);
                    str = trstring1.replaceFirst(findTxt, replaceTxt);
                    mProcessQuestionTestItemTable.setCellSelectionEnabled(true);
                    mProcessQuestionTestItemTable.changeSelection(i, j, false, false);
                    mProcessQuestionTestItemTable.requestFocus();
                    System.out.println("I:" + i);
                    System.out.println("J:" + j);
                    mProcessQuestionTestItemTable.setValueAt(rowstring, i, j);


                }

              }`

1 个答案:

答案 0 :(得分:1)

  

我有一个包含6列的Jtable,我在第6列中有复选框   因此,您应该从索引为0到4的列进行循环。

此:

        for (j = 1; j < 6; j++) {

应该是这样的:

        for (j = 0; j < 5; j++) {

代替。如果您注意到除了第6列中出现的带有复选框的unwanton文本外,替换文本函数也不适用于第1列中的项目,这也解释/修复了它。

HTH。

P.S。我假设相当多,重新提出你的问题,如果这不是你的意思,那就更清楚了......


编辑:

只是详细说明我的评论:

Java Swing教程是一个很好的起点:如何获得boolean values to display in JTables as checkboxes。您感兴趣的是他们通过执行以下操作为其表实现自定义TableModel:

class MyTableModel extends AbstractTableModel {

    ...

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

    ...
}

在你的情况下,它可能更明确,如

    public Class getColumnClass(int c) {
        if (c == 7)
        {
            return Boolean.TYPE;
        }
        return String.class;
    }