Java Swing JPanel.add不会将组件添加到面板中
我不熟悉Java Swing。因此,我面临向主窗口添加组件的问题 这是我的密码Java Swing JPanel.add不会将组件添加到面板中,java,swing,Java,Swing,我不熟悉Java Swing。因此,我面临向主窗口添加组件的问题 这是我的密码 public class MainFrame extends JFrame { public MainFrame(){ setTitle("Tetris"); JComponent gamePanel = new GamePanel(); add(gamePanel); setDefaultCloseOperation(JFrame.EXIT_
public class MainFrame extends JFrame {
public MainFrame(){
setTitle("Tetris");
JComponent gamePanel = new GamePanel();
add(gamePanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 600);
setVisible(true);
}
}
public class GamePanel extends JPanel {
public GamePanel(){
setLayout(new BorderLayout());
setBackground(Color.white);
add(new Ball(), BorderLayout.NORTH);
add(new StartButton(), BorderLayout.SOUTH);
}
}
public class Ball extends JComponent {
@Override
protected void paintComponent(Graphics g) {
Graphics2D graphics2D = (Graphics2D)g;
graphics2D.setColor(Color.RED);
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics2D.fillOval(40,40,10,10);
}
}
当我调用main方法new MainFrame()时,我得到的窗口只有一个按钮。没有球。你能帮我吗?将球放在
BorderLayout.CENTER
而不是BorderLayout.North
@Marc\u Alx如果你将球放在BorderLayout.North
中,它将使用默认大小,即零。将其放置在BorderLayout.CENTER
中会使其展开以填充面板
如果您确实希望它位于BorderLayout.North
中,那么您应该为球创建一个构造函数来设置其首选大小
还要注意,Ball的paintComponent()
方法的第一行应该是
super.paintComponent(g);
确保在将球移动到其他位置时渲染正确的背景色,并删除旧球图像。球的构造器在哪里?您只调用了一些超级方法,而没有调用构造函数。