1

(ファイルから読み取った) テキストを JPanel に表示する際の問題を解決するためのコースにあると思った後、イライラして振り出しに戻ってしまいました。

コードは以下のとおりです。その結果、400x500 の空白の画面が表示されます。nextLine() + nextLine() を displayText コマンドとして使用するいくつかの組み合わせでは、ファイルから 1 つの単語が表示されます (単語は複数回異なっています)。これは疑問に思います: テキストの折り返しを処理するコードが必要ですか? テキストファイル自体がパラグラフになっているので、sf.displayText は sf.displayText(reader.next() + reader.nextline() + reader.nextline() と言うべきだと思い、他の組み合わせも試してみましたが、これかもしれませんwhile パラメータを混乱させる. 単純な文で段落のない別のテキストファイルも試しましたが、やはり何も表示されません.

オンラインで調べたところ、レイアウトが問題になる可能性があり、代替オプションは BufferedReader または JTextArea を使用している可能性があることがわかりました。Big Java をブラウズしても、読み取れると感じたものは何も提供されませんでした。スキャナーに関するすべての議論は整数に向けられたのに対し、私が読みたいファイルは散文です。また、コード自体に小さなテキストを入れて、その下にある他のすべてをキャンセルして、コードから JPanel にテキストを転送できるかどうかを確認しました。

StoryFrame sf = new StoryFrame();
sf.displayText("Life is beautiful"); 

しかし、まだ何も起こりませんでした。最終的には、ファイルのテキストを JPanel に入れ、各段落を前の段落から 5 秒後に表示したいと考えています。最終的に、私の質問は次のとおりです。

  • テキストが表示されない、または 1 つの単語しか表示されないのはなぜですか? レイアウトを指定していないからですか?
  • テキストの折り返しについて考える必要はありますか?
  • JPanel の代わりに JTextArea を調べ、Scanner の代わりに BufferedReader を調べる必要がありますか?
  • Scanner の nextLine メソッドを正しく使用していますか?
  • ファイルを読み込んでそのファイルのテキストを表示するコマンドを StoryFrame の display メソッドに入れることはできますか (これにより、作業がずっと簡単になると思います)。

私はそれがたくさんあることを知っているので、質問のいずれかへの回答は大歓迎です、ありがとう. トム

import javax.swing.JFrame;
import javax.swing.JLabel;

public class StoryFrame extends JFrame {

private JLabel mylabel;
public StoryFrame() {

    setTitle("見張ってしながら...");
    setSize(400,500);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    mylabel = new JLabel();
    this.add(mylabel);
    setVisible(true);
}


public void displayText(String text) {
    JLabel storyText = new JLabel();
    add(storyText);
}

}

表示イントロ

import java.util.Scanner;
import java.io.File;
import java.io.IOException;

class ShowIntro {
 public static void main(String args[]) 
        throws IOException {

StoryFrame sf = new StoryFrame();
Scanner reader = new Scanner(new File("Try.txt"));

while (reader.hasNextLine()) {
    //String line = in.nextLine() Not sure whether this would contribute, I doubt it does though
    sf.displayText(reader.next()); 
            //sf.displayText(reader.next() + reader.nextLine() + reader.nextLine()); was also attempted.

    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {          }
}

 }
}
4

2 に答える 2

3

displaytext メソッドでテキストを使用するメソッドを呼び出さないため、失敗します

public void displayText(String text) {
    mylabel.setText(text);
}
于 2012-11-30T16:21:29.090 に答える
2

また、一度に 1 語ずつファイルを読んでいます。

  sf.displayText(reader.next()); 

次のようにする必要があります。

   sf.displayText(reader.nextLine());

次の改行文字まで読みたい場合。


これは、以下のコメントのいくつかを満たすために元の質問にはありませんでしたが、ここではプログラムの修正版です

package com.vincentramdhanie.kitchensink;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;

public class StoryFrame extends JFrame {

    private JTextArea area;
    public StoryFrame() {

        setTitle("見張ってしながら...");
        setSize(400,500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        area = new JTextArea(10, 30);
        area.setEditable(false); 
        area.setCursor(null); 
        area.setOpaque(false); 
        area.setFocusable(false);
        this.add(area);
        setVisible(true);
    }


    public void displayText(String text) {
        area.setText(text);
    }

    public static void main(String args[]) 
        throws IOException {

        StoryFrame sf = new StoryFrame();
        Scanner reader = new Scanner(new File("Try.txt"));

        while (reader.hasNextLine()) {                
             String line = reader.nextLine();
             sf.displayText(line); 
             try {
                //to skip blank lines. If the line has no non-space characters then do not sleep
               if(!line.trim().equals("")){
                  Thread.sleep(5000);
               }
             } catch (InterruptedException e) {          }
        }
     }
}
于 2012-11-30T16:32:31.343 に答える