0

私は Java が初めてで、次のコードについて助けが必要です。私は2つのクラスを書きました。1 つは JFrame を宣言し、もう 1 つは JLabel を宣言しています。この方法でフレームにラベルを追加したいのですが、エラーが発生します。それを機能させるには、どのような変更を行う必要がありますか:

import java.awt.*;
import javax.swing.*;

public class test {

    public static void main (String[] args) {

        JLabel l1 = new JLabel("Label into Frame");
        Frame f1 = new Frame();
        f1.displayFrame.add(l1);
        f1.displayFrame();      
    }   
}

class Frame {

    void displayFrame() {

        JFrame frame = new JFrame("Test");
        frame.setVisible(true);
    }   
}
4

3 に答える 3

3

このように作成することはできません。カスタム フレーム クラスを構築する場合は、次のように定義する必要があります。

public class MyFrame extends JFrame

すべての JFrame メソッドなどを取得します。上記のコードでは、 を呼び出してからdisplayFrame、その上でメソッドを呼び出そうとしていますがadd、これは機能しません。それを機能させるには(最も単純な形式で)これを試してください:

public static void main(String[] args) {

    JLabel l1 = new JLabel("Label into Frame");
    JFrame f1 = new JFrame();
    f1.setSize(100, 100);
    f1.add(l1);
    f1.setVisible(true);
}

基本について学ぶために、いくつかの優れた Java チュートリアルを試してみることをお勧めします。

于 2012-10-15T16:16:25.343 に答える
0

-UIスレッド上で作業を続け、UIスレッド上でNon-UI作業することは常に良いことNon-UIです。

- Java GUI アプリケーションでは、このmain()メソッドは長生きしません。GUI の構築をスケジュールした後、メソッドはEvent Dispatcher Thread終了します。GUI を処理するのは EDT の責任です。

JLable-にを直接配置しないJFrameでください。 を に使用しJPanelJFrameから を配置JLableしてください。

-しかし、簡単にするために、ここではJPanelを使用しません

例えば:

class MyFrame extends JFrame {

    JLabel l1;

    public MyFrame() {

        this.setSize(400,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setComponent();
        setHandling();

    }   

    public void setComponent(){

    l1 = new JLabel("Label into Frame");
    this.add(l1);

    }

    public void setHandling(){

      // Use this to handle the Events on the EventSources.
    }

    public static void main(String[] args){

       EventQueue.invokeLater(new Runnable(){

         MyFrame frame = new MyFrame("Test");
        frame.setVisible(true);

       });

    }
}
于 2012-10-15T17:01:03.667 に答える
0

メソッド displayFrame は何も返しません

void displayFrame() {...}

メソッドの減速は{accessibility} [type] [name({parameter {, parameter ...}})]のパターンに従います

アクセシビリティは、誰がメソッドにアクセスできるかを定義し、publicprotectedprivateまたはpackage-private

Typeは、このメソッドが返す値のタイプを示します。voidメソッドが値を返さないという特別なタイプの状態

Nameはメソッドの名前です。これは、メソッドを識別してアクセスする方法です

パラメーターは、メソッドに渡したい任意の数のオプションの値です。

この情報を利用して、その方法を詳しく見てみましょう。

void displayFrame() {...}

これは、メソッドがパッケージ プライベートであることを示しています(これは、メソッドが同じパッケージ内からのみアクセス可能であり、サブクラスによって拡張できないことを意味します)、何も返さないということです。

f1.displayFrame.add(l1);

したがって、このメソッドを呼び出すと、Java はad(...)何にも適用する方法を理解できず、意味がありません。

より良い解決策は、フレームを取得するgetterメソッドを提供するか、 displayFrameメソッドからフレームを返すことです。どちらにも良い議論がありますが、個人的にはゲッターの方が好きです

public class test {

    public static void main (String[] args) {

        JLabel l1 = new JLabel("Label into Frame");
        Frame f1 = new Frame();
        JFRame myFrame = f1.getFrame();
        myFrame.add(l1);
        f1.displayFrame(); // there's actually no need for this 
    }   
}

class Frame {
    private JFrame frame = new JFrame("Test");

    public JFrame getFrame() {
        return frame;
    }

    void displayFrame() {
        frame.setVisible(true);
    }   
}

時間をかけて、Learning the Java Languageを読みます。

于 2012-10-15T19:16:00.637 に答える