I've initialized a GridBagLayout globally, then in my class constructor have instantiated it and added some buttons etc. to it.
How can I add things to it after the fact? Simple class extends JFrame. Whenever I try class.add(stuff, gridbagconstraints) after the fact (used just add(stuff, gribagconstraints) in constructor) Nothing happens and nothing is added to my layout.
Do I need to "refresh" the layout manager or something? It is declared globally.
Update: I've tried revalidate() but it does not seem to be working, here is a simplified version of my code with a test button in place for proof of concept:
public class MainGUI extends JPanel{
static GridBagConstraints c;
static MainGUI mainGUIclass;
static JFrame mainGUIframe;
public MainGUI() {
this.setLayout(new GridBagLayout());
c = new GridBagConstraints();
saveButton = new JButton("Save and Exit");
saveButton.setPreferredSize(new Dimension(200, 30));
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 4;
add(saveButton, c);
}
public static void main(String[] args) {
mainGUIframe = new JFrame("Message");
mainGUIframe.setSize(800,800);
mainGUIclass = new MainGUI();
mainGUIframe.add(mainGUIclass);
mainGUIframe.setVisible(true);
//now the addition
JButton newButton = new JButton("New Button");
newButton.setPreferredSize(new Dimension(200, 30));
c.gridx = 5;
c.gridy = 0;
c.gridwidth = 4;
mainGUIclass.add(newButton,c);
//none of this seems to work
mainGUIclass.revalidate();//?
mainGUIclass.repaint();//?
}
}
Update2: This appears to be an issue with the passbyvalue nature of java and another class(canvas) I am trying to add to my layout. Will update if I find a solution.
Update3: This is a thread problem, the class I'm calling is hanging the main window.
Edit: I provided the code as a reference, and tried to be complete to provide a complete picture, not to be easily compiled on its own. Thank you to all who offered your assistance.
Update4: Success! They key was that the mediaplayer class did an "isDisplayable()" check, which caused it to hang the program if the frame it was being added to was not get added to the gridbaglayout. A series of unfortunate looking pass by values (of JInternalFrames), preadding the internalframe to the gridbaglayout and a remote start of the media from another method allows what I am seeking to work.