0

私は学校の Java プロジェクトを仕上げていますが、ある時点で行き詰っています。

割り当ては、タスクを保存して追加/編集または削除し、その情報をコンピューターのディレクトリのテキストファイルに保存できるタスクプランナーを作成することです。

このように、アプリを開くたびに、保存されたタスク情報が GUI に読み込まれます。

私が直面している問題は、(読み込み時に) GUI の特定のテキストフィールドに情報を挿入する必要があることです...ただし、すべてのテキストフィールドを完了する必要がない場合があります-つまり、必須ではありません-

そのため、.setText() メソッドに空の引数があり、コードが機能しないことがあります...

空の引数を検出するたびに「」(スペース)を挿入して問題を解決しようとしましたが、新しい空のTextFieldで新しいGUIウィンドウをクリックすると自動的にスペースがあり、ユーザーは何かを書き込む前にバックスペースを押す必要があります....

これに対するより良い解決策はありますか?

すべてのタスクをロードするコードは次のとおりです...

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

 public class ReadTask extends Planner {

    public static void read(){

        String[] myArray = new String[8];
        String line = "";

        TaskWindowNew currentTask = null;

        try 
        {
            BufferedReader br = new BufferedReader(new FileReader("PlannerText.txt"));          

            while (( line = br.readLine()) !=null) 
            {
                myArray = line.split("\\|");

                for(int i=0;i<myArray.length;i++)
                {
                    if( myArray[i].isEmpty())
                    {
                        myArray[i] = "yoooo";
                    }
                }

                System.out.println(myArray.toString());

                try{
                    currentTask = new TaskWindowNew();
                    currentTask.popupFrame.setVisible(false);

                    // IMPORTANT = If one or more field(s) is left empty the .doClick function will not work
                    // we need to find a solution for this.
                    currentTask.titleField.setText(myArray[1]);
                    currentTask.minuteField.setText(myArray[2]);
                    currentTask.hourField.setText(myArray[3]);
                    currentTask.daysMonthField.setText(myArray[4]);
                    currentTask.MonthField.setText(myArray[5]);
                    currentTask.daysWeekField.setText(myArray[6]);
                    currentTask.specialSymbolField.setText(myArray[7]);

                    //this emulates the action of the OK-button in the new task window !
                    currentTask.buttonOk.doClick();

                 } catch (ArrayIndexOutOfBoundsException e)
                 {

                 }
            }

            br.close(); 

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        updateScrollPanel();


    }

}
4

2 に答える 2

0

返信/コメントをくださった皆様、ありがとうございます

myArray を消去し、.split の結果を配列に直接割り当てることで問題を解決しました。なぜこのように機能するのかわかりません...

私の SaveTask-class に興味がある人のために、私はこのようにデータを保存します

outputStream.println(order + "|"+ title +"|"+ minutes +"|"+ hours +"|"+ daysPerMonth +"|"+ months +"|"+ daysPerWeek +"|"+ specialSymbol +"|"+"end");
order++;

しかし、次のコードは最後に「終了」フラグがないと機能しません...そうしないと、配列が8スロット長くならず、最後に入力されたTextFieldと同じくらい長くなります..( ArrayIndexOutOfBoundsException-problems をくれました)

それが私がそれを修正した方法です。

StringTokenizer は実際には反対のことを行うので、@skandigraun は混乱していると思います (私は信じています)。

ここを参照してください: http://www.coderanch.com/t/446893/java/java/Difference-split-StringTokenizer-nextToken

そして動作するコード:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

 public class ReadTask extends Planner {

    public static void read()
    {

        //try-catch for IOExceptions
        try 
        {
            //Make the inputStream
            BufferedReader br = new BufferedReader(new FileReader("PlannerText.txt"));

            //The String containing each line
            String line = null;

            //For each line do the following
            while ( (line = br.readLine()) !=null) 
            {               
                //Make a new Task-window
                TaskWindowNew currentTask = new TaskWindowNew();

                //Set visibility to false
                currentTask.popupFrame.setVisible(false);

                //An array containing each string seperated by the delimiter
                String[] currTask = line.split("\\|");

                System.out.println(currTask.length);

                System.out.println(currTask[0]);

                //Fill each field with the corresponding String
                currentTask.titleField.setText(currTask[1]);
                currentTask.minuteField.setText(currTask[2]);
                currentTask.hourField.setText(currTask[3]);
                currentTask.daysMonthField.setText(currTask[4]);
                currentTask.MonthField.setText(currTask[5]);
                currentTask.daysWeekField.setText(currTask[6]);
                currentTask.specialSymbolField.setText(currTask[7]);

                //this emulates the action of the OK-button in the new task window !
                currentTask.buttonOk.doClick();
            }

            //Close the stream
            br.close(); 

        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }

        updateScrollPanel();            
    }
}
于 2013-05-15T16:05:10.687 に答える