我不知道为什么,但每次运行此代码都会出错。
错误是:线程"main"java.lang 中的异常:未解决的编译问题: JFrame 类型中的方法 setLayout(LayoutManager) 不适用于参数 (FlowLayout) 在桂。FlowLayout.main(FlowLayout.java:14)
我正在学习Java,我是初学者,所以我真的不知道该怎么做。请帮助我。
package gui;
import java.awt.LayoutManager;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FlowLayout {
public static void main(String[] args) {
JFrame frame = new JFrame(); //cerates frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //exit out of application
frame.setSize(500, 500); //sets x-dimesion, and y-dimension of frame
frame.setLayout(new FlowLayout());
frame.add(new JButton("1"));
frame.setVisible(true);
}
}
您gui.FlowLayout
创建的类与您必须为框架提供的布局java.awt.FlowLayout
之间存在潜在的冲突。
该错误是由于JFrame.setLayout()
方法需要java.awt.FlowLayout
而不是gui.FlowLayout
,这是代码中唯一可用的 FlowLayout。
为了解决这个问题,我会做以下事情
- 通过重命名您创建的类(例如,重命名为
FlowLayoutExample
)来消除歧义。 - 导入您实际需要的
java.awt.FlowLayout
。
代码应变为:
package gui;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.FlowLayout;
public class FlowLayoutExample {
public static void main(String[] args) {
JFrame frame = new JFrame(); //cerates frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //exit out of application
frame.setSize(500, 500); //sets x-dimesion, and y-dimension of frame
frame.setLayout(new FlowLayout());
frame.add(new JButton("1"));
frame.setVisible(true);
}
}
注意:还有另一种可能:可以跳过导入,直接提及完整的类名(带包):
frame.setLayout(new java.awt.FlowLayout());
我倾向于首选第一种解决方案,因为:
- 名称
FlowLayout
并不能反映您的类所做的事情,而恕我直言FlowLayoutExample
更明确。 - 始终使用完整的类名会使代码更加冗长,因此可读性降低。
只需添加库:导入java.awt.FlowLayout