2013-01-31 93 views
1

我是Java初学者&我正在学习swing api。我遇到了我的代码问题,我无法弄清楚如何解决它。请帮忙。javax swing - 创建窗口

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

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 
+2

+1 SSCCE :) –

+0

您需要一个Java教程了解,什么是构造函数。方法和其他OO东西。 –

回答

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语句返回适当的数据类型相匹配的方法签名,或者你会得到你的错误:

invalid method declaration; return type required

Returning a Value from a Method

除非你正试图创造比方法HelloWorldApp类的构造函数必须给出类名(对Providing Constructors for Your Classes读):

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

其他建议

  • 不要不必要地延伸JFrame

  • 不要调用setSize而是使用正确的LayoutManager和/或覆盖getPreferredSize并返回Dimension S的适合其内容。在将其设置为可见之前,但在添加组件之前,请先在JFrame上调用pack()

  • 创建并通过SwingUtilities.invokeLater(Runnable r)块操作上Event Dispatch Thread Swing组件:

    SwingUtilities.invokeLater(new Runnable() { 
        @Override 
        public void run() { 
         //create and show ui here 
         CustomWindow w = new CustomWindow(); 
         w.setVisible(true); 
        } 
    }); 
    
+0

我只是一个初学者,并不真正知道SwingUtilities.invokeLater()会做什么。 – JaPerk14

+0

@ JaPerk14看到我的更新...并点击'Event Dispatch Thread'它会将你链接到Java并发课,它应该告诉你所有你需要知道的东西 –

+0

上面你调用SwingUtilities.invokeLater()的代码示例,你会在public static void main(String args [])中运行这个吗? – JaPerk14

3

此行

public CustomWindow() { 

书面需要返回类型,如果你不(void为宜返回任何东西)。然而,这显然意味着要成为构造者;如果是这种情况,则需要将其命名为与其所在的类相同的名称。您需要将其重命名为HelloWorldApp或将该类重命名为CustomWindow

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); 

} 

}