0

基本的にここで行っているのは、テキスト ファイルの内容をユーザー入力フィールドにインポートすることです (そのうちの 7 つがあります。コマンド [i] のためにループを実行してそれらを調べます。コードはコンソール内で正常に動作しますが、各フィールドの最後の行を入力するだけなので、GUI では機能しません。

http://imageshack.us/f/692/21778853.jpg

ご覧のとおり、コンソールに正常に出力されますが、GUI で [インポート] をクリックしてデータをインポートすると、txt ファイルの最後のコマンドが表示されます。

私のコードは次のとおりです。

    final JTextField Command[];//Create one dimensional array 
    Command = new JTextField[8];//Declare Command as a JTextField 
    for (int i = 1; i < 8; i++)//Run the loop through each selection 
    { 
        Command[i] = new JTextField(i);//Read through each text field
    }
    //Add user input fields including their absolute position on the panel
    Command[1].setText("Please enter the commands...");//Starting text
    Command[1].setBounds(121, 13, 236, 25);//Set the position of the text field
    getContentPane().add(Command[1]);//Add this text field to the content
            Command[2].setBounds(121, 47, 236, 25);/fsdfsdf
    getContentPane().add(Command[2]);

    Command[3].setBounds(121, 83, 236, 25);/fasdfasd
    getContentPane().add(Command[3]);

    Command[4].setBounds(121, 119, 236, 25);/fsfasdasdf
    getContentPane().add(Command[4]);

    Command[5].setBounds(121, 155, 236, 25);
    getContentPane().add(Command[5]);

    Command[6].setBounds(121, 191, 236, 25);
    getContentPane().add(Command[6]);

    Command[7].setBounds(121, 227, 236, 25);
    getContentPane().add(Command[7]);  

            //IMPORT FILE   
    JMenuItem Import = new JMenuItem("Import");
    File.add(Import);
    Import.addActionListener(new ActionListener() {//Call up ActionListener function
        public void actionPerformed(ActionEvent arg0) {//Event handler
            try {
                //use buffering, reading one line at a time
                //FileReader always assumes default encoding is OK!
                BufferedReader input = new BufferedReader(new FileReader("W:\\EclipsePortable\\Data\\workspace2\\" +
                                        "RobotController\\src\\RobotController\\Import commands.txt"));
                try {
                    String line = null; //not declared within while loop
                    while (( line = input.readLine()) != null) {
                        System.out.println(line);//Print the lines
                        for(int i = 1; i < 8; i++) {
                        Command[i].setText(line);
                    }
                }}
                finally {
                    input.close();
                }
            }
            catch (IOException ex){
                ex.printStackTrace();
            }
    }});`
4

1 に答える 1

1

したがって、ファイルインポートコードでこれを行っています...

for(int i = 1; i < 8; i++) {
    Command[i].setText(line);

これは、現在のテキスト行をすべてのフィールド (すべてのフィールドに同じテキスト行) に適用することです。つまり、ファイルを読み終わるまでに、ファイルの最後の行しか取得していません。

代わりに、フィールド インデックスへの参照を保持し、読み取る行ごとにインクリメントします。

例を追加

                String line = null; //not declared within while loop
                int fieldIndex = 0;
                while (( line = input.readLine()) != null) {
                    System.out.println(line);//Print 
                    Command[fieldIndex].setText(line);
                    fieldIndex++
                    if (fieldIndex > 7) {
                        break;
                    }
于 2013-02-03T20:04:01.830 に答える