Java setBounds not working with JPanel

2019-02-18 11:04发布

i am doing a small Gui in java. i am using setBounds methods to set the position of buttons etc on my JFrame , but problem is that when i use it with JPanel button is not visible on JFrame , and without JPanel its quite ok ,, see both the codes and please help me as i am beginner and facing these foolish problems .

This one is working fine

  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);

Same code when i add Button to Jpanel then it does not work so whats wrong , please guide me

  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);

please help me in this small problem

2条回答
爷、活的狠高调
2楼-- · 2019-02-18 11:19

You must get rid of the JPanel's layout, in order to set absolute positions:

p.setLayout(null);

查看更多
趁早两清
3楼-- · 2019-02-18 11:31

The problem is that when you use absolute positioning, the JPanel component has no default size so does not appear. To get it to appear you could do

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);

From Doing Without a Layout Manager

Although it is possible to do without a layout manager, you should use a layout manager if at all possible. A layout manager makes it easier to adjust to look-and-feel-dependent component appearances, to different font sizes, to a container's changing size, and to different locales.

The choice of layout manager will depend on how you wish to lay out the components.

See A Visual Guide to Layout Managers.

查看更多
登录 后发表回答