1

在我当前的项目中,我有一个包含 4 列的 jtable。我不想在第二列中存储重复的数据,所以我在将 jtable 中的每一行存储到数据库之前检查它。

这是我的代码:

String s="";
int row = table.getRowCount();
for (int i=0; i<row; i++) 
{
    s = table.getValueAt(i, 1).toString().trim();
    if (name.getText().equals(s)) 
    {
      JOptionPane.showMessageDialog(null, "data alreadyexist.","message",JOptionPane.PLAIN_MESSAGE);
    break; 
    } else {
      add();
      break;
    }
} 
4

3 回答 3

2

正如我所见,你不是遍历整个表格。您只需检查第一行中的数据是否可用。在此之后,该方法注意到第 2 行中可能有相同的数据并中断,因此您添加了 1 行并停止,因为您逐行检查它,并且对于每一行不匹配,您确实添加一个新的,直到他找到与您要添加的行匹配的行

String s = "";
boolean exists = false;
for (int i=0; i<table.getRowCount(); i++) 
{    
    s = table.getValueAt(i, 1).toString().trim();
    if(name.equals(s))
    {
       exists = true;
       break;
    )
)
if(!exists) 
    add();
else 
    JOptionPane.showMessageDialog(null, "data already exist.","message",JOptionPane.PLAIN_MESSAGE);

现在您只需要检查您正在寻找的字符串是否以正确的方式修剪并且它应该可以工作

于 2012-11-26T13:31:09.230 回答
1

尝试这个

ArrayList<String> contentList = new ArrayList();
int row = table.getRowCount();
for (int i=0; i<row; i++) 
{
    String str = table.getValueAt(i, 1).toString().trim();
    if (contentList.contains(str)) 
    {
      JOptionPane.showMessageDialog(null, "data alreadyexist.","message",JOptionPane.PLAIN_MESSAGE);
      break; 
    } else {
      contentList.add(str);
      add();
      break;
    }
} 
于 2012-11-26T14:01:41.087 回答
1

尝试这个:

    int row = jTable1.getRowCount();
    Object[] content = new Object[row];
    for (int i = 0; i < row; i++) {
        content[i] = jTable1.getValueAt(i, 0);
    }
    Object value_to_find= 2000;
    boolean exist = Arrays.asList(content).contains(value_to_find);
    if (exist){
        JOptionPane.showMessageDialog(null, "Value exist", "Duplicate", JOptionPane.ERROR_MESSAGE);
    } else {
        addRow();
    }

将所有行保存在数组中,而不是使用 Arrays.asList(content).contains(value_to_find) 搜索 value_to_find

于 2014-04-26T17:07:48.227 回答