我正在尝试使用 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);
最佳答案
查看FlowLayout
的Javadoc:
A flow layout lets each component assume its natural (preferred) size
由于您进行了一些自定义绘制,BallPanel
无法计算其首选尺寸(基于您添加面板的组件)。因此,在 BallPanel
类中重写 getPreferredSize
方法以返回正确的尺寸(正确意味着与您的自定义绘画相匹配)。考虑对 getMinimumSize
和 getMaximumSize
执行相同的操作。
当我必须调试 Swing 布局问题时,我总是使用的方法是为我的组件添加特定颜色的边框。这样您就可以清楚地看到组件在其父容器中所占的大小,这可能是调试的一个很好的起点。在你的情况下,它将显示一个非常小的面板;-)
关于java - 使用 FlowLayout 将 JPanel 添加到 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085790/