0

私はこの質問への答えを探してインターネットを歩き回っていましたが、かなり手ぶらで出てきました。

私は大学の実践的なJFrameをフォローしており、講義ノートと実践的なガイダンスシートのアドバイスを使用して、次の基本的なコードを使用しています。

public HelloFrameMenu()
{
    message = "Hello, World!";
    label = new JLabel(message);
    label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE));
    add(label, BorderLayout.CENTER);
    createSouthPanel();

    setSize(FRAME_WIDTH, FRAME_HEIGHT);
}

これにより、JPanelにテキストメッセージが作成され、createSouthPanel()メソッドが実行されます。このメソッドは正常に機能し、いくつかのメニューリストをJFrameに追加します。

私の質問は、追加機能に関するものです。これが何の一部なのかわかりません。静的メソッドの場合、そのクラス名が前に付くと思いました。そうではないので、それはJFrameパッケージの一部であるか、Javaによって自動的にロードされるクラスの1つであると想定しましたが、どちらにもメソッドが見つかりません。

この方法はどこから来たのですか?
なぜ前に何も付いていないのですか?
このように他にどのような方法を使用できますか?

4

5 に答える 5

2

javadocを見ると、にaddメソッドがないことがわかりますJFrame。ただし、いくつかのaddメソッドはコンテナとコンポーネントから継承されます。これらは、[継承元のメソッド...]セクションにリストされています。

于 2013-02-13T18:32:45.457 に答える
2

JFrame#addは、から継承されるインスタンスメソッドですjava.awt.ContainerJFrame直接サブクラス化したので、ここでは私のインスタンスの前にはありません。通常、フレームに新しい機能を追加することはないため、インスタンスを直接作成して以下を使用することをお勧めします。

JFrame myFrame = new JFrame();
...
myFrame.add(...);

使用可能なすべてのメソッドについては、 javadocを確認してください。

于 2013-02-13T18:33:03.723 に答える
1

Containerから継承されたメンバーであるため、「this.add」と考えることができます。

于 2013-02-13T18:34:01.360 に答える
1

クラスHelloFrameMenuを拡張する必要がJFrameあり、addメソッドはContainerから取得され、フレームにビジュアルコンポーネントを追加するために使用されます。との前にsuper(eg )が付いているaddと、よりわかりやすくなります。これは、メソッドがスーパークラスからのものであることを示すために常に使用するものです。setSizesuper.add(...)

于 2013-02-13T18:36:03.820 に答える
1

それは相続と関係があります。Javaはオブジェクト指向言語であり、(ほとんど)すべてがオブジェクトであることを意味します。

その後、オブジェクトを階層に配置できます。
たとえば、CatオブジェクトはAnimalオブジェクトを拡張する場合があります。Animalのすべての動作(メソッド)を継承し、独自の動作(メソッド)を追加できます。

あなたの場合、JFrameはContainerを拡張し、Containerにはaddメソッドがあります。

于 2013-02-13T18:36:35.580 に答える