2

Java を書くのは非常に新しいので、私が得ることができるどんな助けにも感謝しています。

別のテキスト ファイルから読み取ったテキストを含む JFrame を作成しようとしています (5 つの段落があり、それぞれが次々に表示されます)。これまでのところ、JFrame にテキストを表示するための助けが必要です (遅延効果については今のところ心配していません)。私は以下のコードでマークから遠く離れていますか? これはよくある問題だと思いますが、他のスレッドがイベントやその他の (私にとっては) 難しいアイデアを処理しており、そのようなコードから必要なものを取得することは、私にとって依然として課題です。

テキストを続けるにはJLabelが必要だと読んだことがあります(他の場所ではJPanelを読んでいますか?)。また、StoryFrame クラスにテキストを表示するためのメソッドも必要だと思います。ここで、JLabel を追加できます (また、ShowIntro クラスに入れる代わりに、遅延効果を作成するのに役立つように nextLine コマンドを記述することもできます。このプロセスを繰り返します)。また、cmd により、静的な場所から非静的メソッドを呼び出していることがわかりました。Java でダミーのテキストを探してみましたが、これを解決する方法がわかりません。このコードが不十分であることはわかっていますが、何が欠けていますか?

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

public class StoryFrame extends JFrame {
        public StoryFrame() {
        setTitle("見張ってしながら...");
        setSize(400,500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public void displayText() {
        JLabel Text = new JLabel();
        add(Text); // I feel I need to add a lot more here to connect the two classes

        }
}


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

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

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

    while (reader.hasNext()) {
    StoryFrame.displayText();       
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {      
        }
    }
 }
}
4

3 に答える 3

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

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

    while (reader.hasNext()) {
        StoryFrame.displayText(); // 1 & 2     
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {      
        }
    }
 }
}

あなたのShowIntroクラスを見ると、2 つの奇妙なことに気付きます。

  1. クラスで非静的メソッド ( displayText()) を呼び出しています。
  2. スキャナーがそのメソッド呼び出しに読み取るものを渡しません。

(1) を修正するには、StoryFrame クラスのインスタンスを変数に渡しStoryFrame、マークされた行でこの変数の名前に置き換えます。
(2) を修正するには、メソッドdisplayText()にパラメーターを 1 つ追加する必要があるため、StoryFrame クラスのそのメソッドのヘッダーを に置き換え、クラスpublic void displayText(String text) {からメソッドを呼び出すときにスキャナーが読み取ったテキストを渡しますShowIntro

修正版(未テスト)

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

    StoryFrame frame = new StoryFrame();                  // Store the StoryFrame in a variable
    Scanner reader = new Scanner(new File("Intro.txt"));

    while (reader.hasNext()) {
        frame.displayText(reader.next());               // pass the text read by the scanner to the displayText() method
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {      
        }
    }
 }
}

displayText()StoryFrame クラスのメソッド:

public void displayText(String text) {       // One parameter: a String
    JLabel Text = new JLabel(text);          // Use the String; make it the content of the JLabel
    add(Text);                               // Now add the JLabel to the JFrame.
}
于 2012-11-27T13:47:04.060 に答える
0

まず、displayText() は静的メソッドではないため、クラスのオブジェクトで呼び出さずに、メインの静的メソッドから非静的メソッドを呼び出すことはできません。

あなたはそのようなものが必要です:

StoryFrame sf = new StoryFrame();
sf.displayText();

それ以外の場合は、次のようにします。

StoryFrame.displayText();

コンパイラは、displayText が静的メソッドであると想定しますが、そうではありません。

displayText() を静的メソッドにしようとしないでください。これは、displayText から非静的メソッドを呼び出すため、新しい問題が発生するためです。したがって、StoryFrame オブジェクトを作成し、それに対して displayText() を呼び出すだけです。

また、アドバイスの一部です。ダミーの本には使用しないでください。役に立たないからです。Java の学習に私がお勧めする優れた本は、Big Java と呼ばれるものです。いろいろ教えてくれます。

また、@schippi が述べたように、displayText() メソッドにはパラメーターが必要です。これは、JLabel に追加するテキストになります。

于 2012-11-27T13:39:49.233 に答える