0

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

我的问题是,在用给定文本替换文本时,我关注特定单元格并使用 setValueAt() 替换。但是第 6 列中的复选框受到干扰,并且文本出现在该列中,如 YES 或 NO(对于选中的复选框我使用的是,取消选中的复选框我使用的是 NO 字符串)。这是我的示例代码:``

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);


                }

              }`
4

1 回答 1

1

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

这个:

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

应该是这样的:

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

反而。如果您注意到除了第 6 列中出现的带有复选框的不想要的文本之外,替换文本功能也不适用于第 1 列中的项目,这也解释/修复了它。

HTH。

ps我假设了很多,如果这不是您的意思,请改写您的问题以使其更清楚...


编辑:

只是为了详细说明我的评论:

Java Swing 教程是一个很好的起点:关于如何获取布尔值以在 JTables 中显示为复选框。您感兴趣的一点是他们通过执行以下操作为他们的表实现自定义 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;
    }
于 2009-12-02T10:17:04.943 回答