【发布时间】:2026-01-13 03:35:01
【问题描述】:
打包摇摆训练;
import static java.awt.Color.BLACK;
import java.awt.GridBagConstraints;
import static java.awt.GridBagConstraints.CENTER;
import static java.awt.GridBagConstraints.NORTH;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.LayoutManager;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JFrameTest extends JFrame{
public JFrameTest(){
setSize(800,800);
setTitle("Hello :D");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(true);
setVisible(true);
}
public class GridBagLayoutTest extends GridBagLayout{
public GridBagLayoutTest(){
setLayout(new GridBagLayout());
};
};
public static class JPanelTest extends JPanel{
public JPanelTest() {
setBackground(BLACK);
setOpaque(true);
}
}
public static class JButtonTest extends JButton{
public JButtonTest(){
};
};
public void main(String args[]){
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JFrameTest T = new JFrameTest();
JPanelTest Jp1 = new JPanelTest();
JButtonTest Jb1 = new JButtonTest();
GridBagLayoutTest Gb1 = new GridBagLayoutTest();
GridBagConstraints c = new GridBagConstraints();
c.ipadx = 100;
c.ipady = 100;
c.gridheight = 1;
c.gridwidth = 1;
c.weightx = 1;
c.weighty = 1;
c.insets = (new Insets(0,0,0,500));
Jb1.setLayout((LayoutManager) c);
T.add(Jp1);
Jp1.add(Jb1);
}
});
}
}
编译它时,我收到一条消息说我没有 main 方法。如果我将 main 方法设为静态,则无法在 run() 中使用 layoutManager,所以我想知道如何才能通过。或者,也许是让 layoutManager 在这种情况下工作的另一种方式。
【问题讨论】:
-
“我的 run() 中不能使用 layoutManager”是什么意思?看起来对我来说应该没问题。但是是的,
main必须是静态的才能成为有效的入口点。 -
首先创建一个具有
public static void main(String[] args)方法的“main”类,使用它来创建“main”类的一个实例。使用“主”类来实际构建和启动您的程序。作为一般经验法则,您应该避免从JFrame扩展,原因有很多,但因为它将您锁定在一个用例中 -
您不能将
GridBagConstraints类型的c转换为LayoutManager。如果您将edit 您的帖子并复制/粘贴到您收到的实际错误消息中,这将有所帮助,这会让您认为您“无法使用 LayoutManager”(而不是关于缺少 main 的消息)。 -
仅根据您的标题,不,您无法避免 main 方法中的静态关键字。 JVM默认不知道调用哪个实例方法,所以它总是寻找main方法,由于它不知道哪个实例,所以main方法必须是静态的。
-
顺便说一句 - 不要扩展
JFrame、GridBagLayout、JPanel或JButton。如果用作(标准,未修改)实例,它们中的每一个都可以正常工作。
标签: java swing static main public