Я инициализировал GridBagLayout глобально, затем в своем конструкторе класса его экземпляр создал и добавил несколько кнопок и т. Д. К нему.
Как я могу добавить вещи к нему после свершившегося факта? Простой класс расширяет JFrame. Всякий раз, когда я пытаюсь использовать class.add (вещи, gridbagconstraints) после факта (используется просто добавить (вещи, gribagconstraints) в конструкторе), ничего не происходит и ничего не добавляется в мой макет.
Нужно ли "обновлять" менеджер макета или что-то еще? Объявлено глобально.
Обновление: я пробовал revalidate (), но, похоже, он не работает, вот упрощенная версия моего кода с кнопкой тестирования для подтверждения концепции:
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: похоже, это проблема с характером java passbyvalue и другим классом (canvas), который я пытаюсь добавить в свой макет. Будет ли обновление, если я найду решение.
Update3: это проблема с потоком, класс, который я вызываю, вешает главное окно.
Редактировать: я предоставил код в качестве справочного материала и попытался дополнить его, чтобы получить полную картину, которую нельзя было скомпилировать самостоятельно. Спасибо всем, кто предложил вашу помощь.
Обновление 4: успех! Ключевым моментом было то, что класс mediaplayer выполнил проверку «isDisplayable ()», которая вызвала зависание программы, если добавляемый кадр не был добавлен в gridbaglayout. Последовательность неудачно выглядящих проходов по значениям (JInternalFrames), добавление внутреннего кадра к gridbaglayout и удаленный запуск носителя из другого метода позволяют мне работать.