I am working on an application and have a screen that needs to have elements (namely some custom JButtons) appear and disappear based on a user selection. However for some reason, when I add these buttons to their pane, the buttton image goes to the top corner, and leaves the text in the center, completely ignoring GridBagConstraints. I am completely stumped on this one as I have done this same exact thing dozens of times earlier in the program without any issues. Here is an image of the problem:
The problem is in this method here, and occurs down towards the bottom.
public void init(){
contentPane.removeAll();
// Setup jlabels
JLabel countyLabel = new JLabel("County");
countyLabel.setFont(new Font("Times New Roman", Font.PLAIN, 18));
JLabel measureByLabel = new JLabel("Measure By: ");
measureByLabel.setFont(new Font("Times New Roman", Font.PLAIN, 18));
String[] countyChoices = {"Washtenaw", "Oakland", "Livingston"};
// setup components
JComboBox<String> countyCombo = new JComboBox<String>(countyChoices);
// place baseComponents
c.weightx = 0.5;
c.weighty = 0.5;
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.NORTH;
contentPane.add(countyLabel, c);
c.gridx = 2;
contentPane.add(countyCombo, c);
c.gridy = 1;
c.gridx = 0;
contentPane.add(trenchButton, c);
c.gridx = 2;
contentPane.add(bedButton, c);
c.gridy = 2;
c.gridx = 1;
contentPane.add(systemSelection, c);
c.gridy = 3;
c.gridx = 0;
contentPane.add(lengthButton, c);
c.fill = GridBagConstraints.BOTH;
c.gridwidth = 4;
c.gridy = 4;
c.gridx = 0;
contentPane.add(choicePane, c);
GridBagConstraints con = new GridBagConstraints();
con.weightx = 0.5;
con.weighty = 0.5;
con.gridx = 0;
con.gridy = 0;
choicePane.add(lengthButton, c);
// revalidate and repaint
choicePane.revalidate();
choicePane.repaint();
contentPane.revalidate();
contentPane.repaint();
}
I have tried doing this in separate methods, the button looks fine when added to the contentPane, the pane is for sure set to gridbagconstraints as I used the expression
JPanel choicePane = new JPanel(new GridBagLayout())
to initialize it.