Java setBounds不能与JPanel一起使用

我正在java中做一个小Gui。 我正在使用setBounds方法在我的JFrame上设置按钮等的位置,但问题是,当我使用它与JPanel按钮在JFrame上不可见,并且没有JPanel它相当好,看到这两个代码,请帮助我作为我是初学者,面对这些愚蠢的问题。

这个工作正常

JFrame jframe = new JFrame("Working Fine"); jframe.setLayout(null); JButton jbutton = new JButton("Position Test"); jbutton.setBounds(0, 0, 100, 100); jframe.add(jbutton); jframe.setSize(300,300); jframe.setVisible(true); 

当我向Jpanel添加Button时,相同的代码然后它不起作用,所以什么是错的,请指导我

  JFrame jframe = new JFrame("causing problem "); jframe.setSize(300,300); JPanel p = new JPanel(); jframe.setLayout(null); JButton jbutton = new JButton("Position Test"); jbutton.setBounds(0, 0, 100, 100); jframe.add(p); p.add(jbutton); p.setVisible(true); //jframe.add(jbutton); jframe.setVisible(true); 

请帮我解决这个小问题

问题是,当您使用绝对定位时, JPanel组件没有默认大小,因此不会出现。 为了让它出现,你可以做到

 JFrame frame = new JFrame("No Problem"); JPanel panel = new JPanel() { @Override public Dimension getPreferredSize() { return new Dimension(300, 300); }; }; panel.setLayout(new FlowLayout(FlowLayout.CENTER)); JButton button = new JButton("Position Test"); panel.add(button); frame.add(panel); frame.pack(); frame.setVisible(true); 

从没有布局管理器

虽然可以不使用布局管理器,但是如果可能的话,应该使用布局管理器。 布局管理器可以更轻松地调整依赖于外观的组件外观,不同的字体大小,容器的大小变化以及不同的区域设置。

布局管理器的选择取决于您希望如何布置组件。

请参阅布局管理器的可视指南 。

您必须摆脱JPanel的布局,以便设置绝对位置:

p.setLayout(NULL);