1

私はJavaの初心者であり、swingapiを学んでいます。コードに問題があり、修正方法がわかりません。助けてください。

以下は、私が使用しているコードの例です。

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

public class HelloWorldApp extends JFrame {


  public static void main(String args[]) {

    CustomWindow w = new CustomWindow();
    w.setVisible(true);

  }

  public CustomWindow() {

    setSize(500, 500);
    setTitle("Jacob Perkins");
    JLabel lbl = new JLabel("Hello World!");
    add(lbl);

  }

}

私の問題は、次のエラーが発生することです。

invalid method declaration; return type required
4

3 に答える 3

4
public CustomWindow() {
    setSize(500, 500);
    setTitle("Jacob Perkins");
    JLabel lbl = new JLabel("Hello World!");
    add(lbl);
}

する必要があります:

public void CustomWindow() {
    setSize(500, 500);
    setTitle("Jacob Perkins");
    JLabel lbl = new JLabel("Hello World!");
    add(lbl);
}

または、void(何も返さないために)代わりに、返したいデータ型を入力します。メソッドには、メソッドのシグネチャに一致する適切なデータ型を返すステートメントを含めるreturn必要があります。そうしないと、次のエラーが発生します。

無効なメソッド宣言。必要な返品タイプ

メソッドから値を返すを参照してください。

クラスのコンストラクターを作成しようとしているのでない限りHelloWorldApp、メソッドにはクラス名を付ける必要があります(クラスのコンストラクターの提供を読んでください)。

public HelloWorldApp() {
    setSize(500, 500);
    setTitle("Jacob Perkins");
    JLabel lbl = new JLabel("Hello World!");
    add(lbl);
 }

その他の提案

  • 不必要に伸ばさJFrameないでください。

  • setSizeむしろ、正しいものを使用したり、その内容に合ったをLayoutManagerオーバーライドgetPreferredSizeして返すのではなく、呼び出してください。表示するように設定する前に、コンポーネントを追加した後にDimension呼び出すよりもpack()JFrame

  • ブロックを介してイベントディスパッチスレッドでSwingコンポーネントを作成および操作します。SwingUtilities.invokeLater(Runnable r)

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            //create and show ui here
            CustomWindow w = new CustomWindow();
            w.setVisible(true);
        }
    });
    
于 2013-01-31T19:00:11.077 に答える
3

この行

public CustomWindow() {

書かれているように、リターンタイプが必要です(void何も返さない場合に適しています)。ただし、これは明らかにコンストラクターであることを意味します。その場合は、クラスと同じ名前を付ける必要があります。名前をに変更するHelloWorldAppか、クラスの名前をに変更する必要がありますCustomWindow

于 2013-01-31T19:01:00.663 に答える
1

Java ファイル名では、実装しているクラスと一致する必要があります。したがって、クラスとファイル名を CustomWindow に変更するか、コンストラクターの名前を HelloWorldApp() に変更する必要があります。

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

 public class HelloWorldApp extends JFrame {


public static void main(String args[]) {

  HelloWorldApp w = new HelloWorldApp();
  w.setVisible(true);

 }
 public HelloWorldApp() {

   setSize(500, 500);
   setTitle("Jacob Perkins");
   JLabel lbl = new JLabel("Hello World!");
   add(lbl);

 }

 }
于 2013-01-31T19:03:32.333 に答える