0

検索された項目を配列から削除することを想定しているいくつかのメソッドをまとめました。また、配列のデータは、 というメソッドを介して JTable に入れられます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 に答える