I am using GridBagLayout as JFrame layout. My elements are not showing no matter what i write. Please don't give answers which use anything but GridBagLayout(sorry if it sound rude)
JPanel Panel;
JButton insertButton = new JButton("Insert");
GridBagConstraints gbc;
public MainFrame() {
this.setTitle("JAVA & MySQL");
this.setVisible(true);
this.setBounds(500, 100, 600, 600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Panel = new JPanel(new GridBagLayout());
Panel.setOpaque(true);
Panel.setBackground(Color.BLUE);
gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.insets = new Insets(0, 10, 0, 0);
gbc.fill = GridBagConstraints.BOTH;
Panel.add(insertButton, gbc);
}
The problem is you didn't add the panel to the top-level container's content pane. Call
this.add(panel)
to make it happen.Besides, as @MaddProgrammer said in his comment, you should call
pack()
andsetVisible()
methods after adding all the components, otherwise you have to callrevalidate()
andrepaint()
in order to validate the components hierarchy.As per Container#add(Component comp) documentation:
In addition you shouldn't mix absolute layout calls such as
setBounds()
,setLocation()
orsetSize()
(just avoid them) and layout managers (these ones are highly recommended)Your code is not clear whats where (is this code inside your frame class) and you have chosen names poorly. By convention field names should start witha lower case letter (to distinguish them from class names).
It appears you never add your panel to the frame, and also you never pack() the frame.
Alter the code like this: