我有一个包含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);
}
}`
答案 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;
}