0

私はここで完全に途方に暮れています。カスタム FileNode クラスを含む TreePaths の Vector を通過し、最後の各ノードに含まれるファイルを抽出するメソッドがあります。その結果、ベクター内のすべてのファイル名のリストが出力されます。それをインクリメントするための for ループがあり、うまくいきましたが、複数のページを持つことができるように while ループに変更しました。現在、何らかの理由で、最後の 11 個のファイルのみが印刷されます。

原因はわかったのですが、原因や対処法がわかりません。コンソール 'lineCount' と 'printPaths.size()' に出力する行を追加したところ、lineCount が 55 に達するまで増加し、その後 15 に戻って増加し続けることがわかりました。名前は、15 に戻るまで実際に印刷を開始しませんでした。

私はデバッグモードでそれをステップスルーし、印刷ループを55回通過し、印刷されたページの一部であることを伝えるコードを印刷関数に返し、それから印刷メソッドにドロップします。ソースがあり、そこから戻ると、ループの先頭に戻り、lineCount は 14 になります。本当に奇妙な部分は、プログラムによると、11 個のファイルを出力するときです。 Vector のその部分はまだ見ていません。

誰かがそれを引き起こしていることを少しでも知っているなら、私は本当に助けていただければ幸いです. リストの出力を処理するコードのチャンクを次に示します。うまくいけば、それで十分です。

        lineCount = 13;
    int lineSpacing = 14;
    g.setFont(new Font("Dialog", Font.PLAIN, 10));
    boolean color = true;
    if (summ) {
        g.drawString(((TreePath) printPaths.get(0)).getPathComponent(
                ((TreePath) printPaths.get(0)).getPathCount() - 3)
                .toString()
                + " : "
                + ((TreePath) printPaths.get(0)).getPathComponent(
                        ((TreePath) printPaths.get(0)).getPathCount() - 5)
                        .toString(), 36, lineCount * lineSpacing);
        lineCount++;
        //for (int j = 1; j < printPaths.size(); j++) {
        while((printPaths.size()>1) && lineCount<55){
            String type = ((TreePath) printPaths.get(1)).getPathComponent(
                    ((TreePath) printPaths.get(1)).getPathCount() - 5)
                    .toString();
            String date = ((TreePath) printPaths.get(1)).getPathComponent(
                    ((TreePath) printPaths.get(1)).getPathCount() - 3)
                    .toString();
            String typeU = ((TreePath) printPaths.get(0))
                    .getPathComponent(
                            ((TreePath) printPaths.get(1)).getPathCount() - 5)
                    .toString();
            String dateU = ((TreePath) printPaths.get(0))
                    .getPathComponent(
                            ((TreePath) printPaths.get(1)).getPathCount() - 3)
                    .toString();
            if (!(type == typeU) && (date == dateU)) {
                lineCount++;
                g.setColor(c1);
                g.drawString(date + " : " + type, 36, lineCount
                        * lineSpacing);
                lineCount++;
            }
            if(color)
                g.setColor(c1);
            else
                g.setColor(c2);
            g.drawString(((TreePath) printPaths.get(1))
                    .getLastPathComponent().toString(), 54, lineCount
                    * lineSpacing);
            color=!color;
            lineCount++;
            printPaths.remove(0);
            System.out.println(printPaths.size());
            System.out.println(lineCount);
        }
    }
4

2 に答える 2

1

順方向に反復している間、コレクションprintPathsから削除しているように見えます。もしそうなら、私はこれが台無しにされるかもしれないことに驚かない。代わりにイテレータの使用を検討してください。また、プログラムのこのロジック部分を、paintまたはpaintComponentメソッド内で実行しているように見えます。これは大したことではありません。メソッドがいつ起動するか、または起動するかどうかを完全に制御できないため、このメソッドの外部でロジックを実行してください。

于 2011-11-18T23:19:37.843 に答える
0

最終的に、私がやろうとしていたことを必要とせずに、Java がそれ自体でかなりうまくページネーションを実装していることを発見しました。

于 2011-11-23T19:40:16.013 に答える