5

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

5
  • 3
    setLayout(null), setBounds(0, 0, 100, 100), and setSize(300,300) are really bad practice. Commented Nov 29, 2012 at 19:48
  • 1
    You should never use a null layout. Read this layout manager tutorial: docs.oracle.com/javase/tutorial/uiswing/layout/visual.html Commented Nov 29, 2012 at 19:50
  • i am learning Java and have not been taught LayoutManagers yet and our instructor asked us to use null untill we go through LayoutManagers , so did not use them . can u please guide me whta's wrong here ? Commented Nov 29, 2012 at 19:52
  • "our instructor asked us to use null untill we go through LayoutManagers" Your instructor should not be instructing anyone until they have gained 'minimum competence' in the subject. Anyone that had, would not tell you to use null layouts. Commented Nov 29, 2012 at 22:31
  • if you know what you are doing, null layouts are perfectly fine, guys. i mean it's just the gui, and the standart layoutmanagers REALLY suck. go html if you want boxed layouts, but when using a programming language, might aswell understand how to code a gui. I mean look at how perfect a simple forms element looks and compare that to swing Commented Aug 31, 2020 at 22:54

2 Answers 2

12

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

p.setLayout(null);

Sign up to request clarification or add additional context in comments.

1 Comment

I was trying to do a absolute layout with percentages, and it didn't work until I tried this. It solves the question why setBounds isn't working, instead of questioning it.
6

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.

1 Comment

i am student and have not learned it yet , ok please guide me which one i should use as beginner , Your answer is accepted .. Thanks