1

我是 Java 初学者,我正在学习 swing api。我的代码有问题,我不知道如何修复它。请帮忙。

下面是我正在使用的代码示例:

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适合其内容的 s。在将其设置为可见之前但在添加组件之后pack()调用。JFrame

  • 通过块在Event Dispatch Thread上创建和操作 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 回答