У меня есть эта странная проблема, когда я добавляю кнопки на панели инструментов. Я добавил действие слушатель одной кнопки, добавленной до кадра показан и он работает отлично:Динамические кнопки добавления во время выполнения в Swing
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
toolbar.add(new JButton("new button"));
}
});
Я также добавил кусок кода, который должен добавить новую кнопку после того, как будут загружены некоторые плагины, а по какой-то причине эта часть кода не работает.
@Override
public void handle() {
System.out.println("Button added");
MainFrame frame = Application.getInstance().getMainFrame();
frame.getToolbar().add(new JButton("Plugin button"));
frame.getToolbar().revalidate();
frame.getToolbar().repaint();
System.out.println(frame.getToolbar().getComponents().length); // It is definitely being added, just not shown
}
Кнопка, безусловно, добавляется, просто не показана. Я бы очень признателен за любую помощь, поскольку эта вещь блокирует меня от дальнейшего развития.
Ваш лучший выбор здесь - показать нам компилируемый и исполняемый код. Поймите, что мы не просим вас показать всю вашу программу, а скорее сконденсировать ваш вопрос/проблему в один маленький класс, который компилируется любым из нас и демонстрирует вашу проблему. Другими словами, [mcve] (пожалуйста, прочитайте ссылку). Также поймите, что это не ссылка на код, а скорее соответствующий код, который вы публикуете здесь с вашим вопросом в качестве редактирования. –
'Кнопка, безусловно, добавляется, просто не отображается.' - тогда у вас есть два кадра в вашем приложении. Один, который виден на экране, и другой, который просто сидит в памяти. Обычно это происходит, когда ваш класс расширяет JFrame, а затем вы создаете второй JFrame. Не расширяйте JFrame, и у вас не будет этой путаницы! – camickr
@camickr Вы правы, я действительно дважды создал основной кадр. Я допустил ошибку при вызове конструктора приложения вместо getInstance() в main (main находится внутри приложения, поэтому я смог вызвать конструктор, даже если он был закрыт), поэтому, когда я впервые вызвал getInstance, основной кадр был создан снова , Спасибо за вашу помощь. – user1176999