我正在尝试使用JPanel的子类在屏幕上显示填充的椭圆 当我尝试使用FlowLayout将此子类的对象添加到JFrame时,椭圆未正确显示我不知道问题是什么。你能帮帮我吗?
这是我的代码
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillOval(0, 0, 50, 50);
}
JFrame frame = new JFrame("Ball");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setLayout(new FlowLayout());
BallPanel ball = new BallPane();
frame.add(ball);
答案 0 :(得分:1)
创建任何自定义组件并执行自定义绘制时,您需要覆盖getPreferredSize()
方法以返回自定义组件的大小。理想情况下,您也可以覆盖最小/最大尺寸。
然后布局管理员可以完成它的工作。
答案 1 :(得分:1)
请参阅FlowLayout
:
流程布局允许每个组件采用其自然(首选)大小
由于您进行了一些自定义绘制,BallPanel
无法计算其首选大小(基于您添加面板的组件)。因此,在BallPanel
类中覆盖getPreferredSize
方法以返回正确的尺寸(正确意味着匹配您的自定义绘画)。考虑对getMinimumSize
和getMaximumSize
执行相同操作。
当我必须调试Swing布局问题时,我总是使用的是以特定颜色为我的组件添加边框。这样,您可以清楚地看到组件在其父容器中的大小,这可能是调试的良好起点。在你的情况下,它会显示一个非常小的面板; - )