2013-07-10 35 views
0

我已经放在一起的几个方法,假设从数组中删除一个搜索的项目,并且数组中的数据也通过名为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' 方法(这是在一个单独的 '列表' 类):

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

只是看看登录登录=新的登录();'在删除方法 – chancea

+1

为了更好的帮助,请发布[SSCCE](http://sscce.org/)。 –

回答

1

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

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

借此:

JScrollPane loginsScrollPane = new JScrollPane(loginsTable); 

要拿你的方法之外。我认为可能会发生的情况是,当您在方法内部创建loginsScrollPane时,它不会被正确添加到testPanel中。

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

1

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

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

你说列表擦拭,我觉得是什么做的是:它声明了一个列表局部变量和一个新的对象分配给它(和它掩盖了另一个列表变量,你之前用过几行)。现在,在createLoginsTable()方法中,你没有这个局部变量,你有“列表”,我猜是你的类中的一个公共字段。现在,你可以做什么,是或本地列表变量传递给上面的函数作为参数createLoginsTable(列表),或尝试擦拭线没有声明所以只有:

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

无论如何,你的代码有点麻烦了,也许你应该重构一下。希望能帮助到你。