BorderLayout只显示一个对象

我决定编写一个小型Java程序来试验BorderLayout,因为我正在开发一个Java游戏,我需要同时将2个对象放在一个JFrame中,我问的每个人都说我需要BorderLayout这样做。

所以我编写的Java程序应该在JFrame上放置一个JButton,并且放置一个图形组件(在这种情况下是一个矩形)。 问题是,只有按钮显示,如下面的图像链接所示:

http://prntscr.com/3m5ek6

由于我的低声誉统计数据,我无法发布实际图像。

这是代码:

main.java – >主方法类+ JFrame / JPanel / JButton构造函数

import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class main { public static void main(String[] args) { Infout m = new Infout(); JFrame f = new JFrame(); JPanel start = new JPanel(); JPanel start2 = new JPanel(); start.add(m); start2.add(new JButton("Hi")); f.add(start,BorderLayout.LINE_START); f.add(start2, BorderLayout.LINE_END); f.setVisible(true); f.setSize(300, 400); } } 

Infout.java – > Rectangle构造函数类

 import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import javax.swing.JPanel; public class Infout extends JPanel{ public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.fill(new Rectangle2D.Double(140, 270, 5, 300)); } } 

有人能告诉我什么是错的吗? 另外,使用BorderLayout是将多个静态和/或动态对象添加到JFrame的最佳选择吗?

谢谢!

抗体

您需要覆盖getPreferredSize()方法,以便布局管理器可以确定组件的正确大小。

How do I do that?

阅读自定义绘画的Swing教程中的部分,了解有关自定义绘制的更多信息,包括显示如何覆盖getPreferredSize()方法的工作示例。