Java setBounds not working with JPanel

37,848

Solution 1

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.

Solution 2

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

p.setLayout(null);

Share:
37,848
Sikander Nawaz
Author by

Sikander Nawaz

I m computer Science student , crazy to learn java Programming ..

Updated on June 27, 2020

Comments

  • Sikander Nawaz
    Sikander Nawaz almost 4 years

    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