我是Java和Java的初学者我正在学习摇摆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
答案 0 :(得分: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
语句,该语句返回与方法签名匹配的适当数据类型,否则您将收到错误:
无效的方法声明;需要返回类型
请参阅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
。而不是在pack()
上致电JFrame
,然后再将其设置为可见,但在添加组件后。
通过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);
}
});
答案 1 :(得分:3)
这一行
public CustomWindow() {
因为书面需要一个返回类型(如果你没有返回任何东西,void
是合适的)。但是,这显然是一个构造函数;如果是这种情况,则需要将其命名为与其所在的类相同。您需要将其重命名为HelloWorldApp
或将该类重命名为CustomWindow
。
答案 2 :(得分: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);
}
}