Java setBounds不能与JPanel一起使用

Sik*_*waz 4 java swing jpanel layout-manager

我在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);
Run Code Online (Sandbox Code Playgroud)

当我向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);
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个小问题

Rei*_*eus 6

问题是当您使用绝对定位时,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);
Run Code Online (Sandbox Code Playgroud)

没有布局管理器

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

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

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


小智 5

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

p.setLayout(NULL);