为什么项目从数组中删除但未从我的表中删除?

时间:2013-07-10 21:39:44

标签: java arrays swing jtable

我已经汇总了一些假设从数组中删除搜索项的方法,并且数组中的数据也通过名为createLoginTable()的方法放入JTable中。

当执行我的删除按钮actionListener方法时,元素或登录成功从数组中删除:'listOfLogins'但该元素似乎没有从JTable中删除,因为它仍然存在。

以下是以actionListener开头的方法:

if(e.getSource()==deleteLoginButton)
    {
        int loopNo = list.nextLogin; ///Variables used in the 'removeLogin' Method
        String foundLogin = list.listOfLogins[foundLocation].toString();
        Login[] loginList = list.listOfLogins;

        LoginList list = new LoginList(); //The 'list' is wiped
        list.removeLogin(loginList, foundLogin, loopNo);

        list.writeLoginsToFile(); //Writes logins to file (not integral to the array)
        String[][] loginTableLogins = new String[50][2]; //Wipes the JTable Array
        createLoginsTable(); //Creates the JTable

        searchLoginButton.setEnabled(true); 
        editLoginButton.setEnabled(false);
        deleteLoginButton.setEnabled(false);
        addLoginButton.setEnabled(true);
    }

这是'removeLogin'方法(这是一个单独的'list'类):

public void removeLogin(Login[] array, String unwantedLogin, int loop)
{
    for(int i=0;i<loop;i++)
    {
        String currentLogin = array[i].toString();

        if(!currentLogin.equals(unwantedLogin))
        {
            Login login = new Login();
            addLogin(array[i]);
        }
    }
}

加'addLogin'方法(虽然我确信这不是我的问题的来源):

public void addLogin(Login tempLogin)
{
    listOfLogins[nextLogin] = tempLogin; 
    System.out.println(listOfLogins[nextLogin]);
    nextLogin++;
    System.out.println(nextLogin);
}

'createLoginsTable'方法:

public void createLoginsTable()
{   
    for(int i=0;list.nextLogin>i;i++)
    {   
        loginTableLogins[i] = list.listOfLogins[i].toArray();
        System.out.println(list.listOfLogins[i].toString());
    }

    JTable loginsTable = new JTable(loginTableLogins, loginTableTitles);
    JScrollPane loginsScrollPane = new JScrollPane(loginsTable);

    loginsScrollPane.setBounds(400, 200, 200, 250);
    testPanel.add(loginsScrollPane);
}

我使用了'System.out.println',所以我99%确定该元素已从数组中删除(通过我的writeLoginsToFile方法也很明显)所以我希望这些信息有所帮助。

2 个答案:

答案 0 :(得分:1)

删除项目后,您不会返回表格。

当您调用方法删除它并写出表格时,重新制作表格后不会返回该表格。

拿这个:

JScrollPane loginsScrollPane = new JScrollPane(loginsTable);

将它带到您的方法之外。我认为可能发生的是当你在方法内部本地创建loginsScrollPane时,它没有正确地添加到你的testPanel。

我认为可能发生的事情是当你添加它时,该方法结束了它丢失了所包含的数据。声明你的滚动窗格,以及声明框架的jtable。

答案 1 :(得分:1)

你的代码有点难以破译,下次也可以放入封闭的类,或者关于那个类的一些细节。以下行做了什么:

LoginList list = new LoginList(); //The 'list' is wiped

你说列表已被删除,我认为它的作用是:它声明一个列表局部变量并为其分配一个新对象(它掩盖了你之前用过几行的另一个列表变量)。现在,在createLoginsTable()方法中你没有这个局部变量,你有“list”,我猜你的类是公共字段。现在您可以做什么,将本地列表变量作为参数createLoginsTable(list)传递给上述函数,或者在没有声明的情况下尝试擦除行,只有:

  

list = new LoginList(); //The 'list' is wiped

无论如何,你的代码有点麻烦,也许你应该稍微重构一下。希望它有所帮助。