我已经汇总了一些假设从数组中删除搜索项的方法,并且数组中的数据也通过名为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
方法也很明显)所以我希望这些信息有所帮助。
答案 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
无论如何,你的代码有点麻烦,也许你应该稍微重构一下。希望它有所帮助。