0

我已经整理了一些方法,这些方法假设从数组中删除搜索项,并且数组中的数据也通过名为createLoginTable().

当我的删除按钮 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”方法(这是在单独的“列表”类中):

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方法也很明显)所以我希望这些信息有所帮助。

4

2 回答 2

1

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

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

拿着这个:

JScrollPane loginsScrollPane = new JScrollPane(loginsTable);

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

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

于 2013-07-10T22:05:52.793 回答
1

您的代码有点难以破译,下次可能还会放入封闭类,或者有关该类的一些细节。以下行有什么作用:

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

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

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

无论如何,你的代码接缝有点困扰它,也许你应该稍微重构一下。希望能帮助到你。

于 2013-07-10T22:14:07.917 回答