2016-01-23 1 views
1

У меня есть эта странная проблема, когда я добавляю кнопки на панели инструментов. Я добавил действие слушатель одной кнопки, добавленной до кадра показан и он работает отлично:Динамические кнопки добавления во время выполнения в 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 

} 

Кнопка, безусловно, добавляется, просто не показана. Я бы очень признателен за любую помощь, поскольку эта вещь блокирует меня от дальнейшего развития.

+2

Ваш лучший выбор здесь - показать нам компилируемый и исполняемый код. Поймите, что мы не просим вас показать всю вашу программу, а скорее сконденсировать ваш вопрос/проблему в один маленький класс, который компилируется любым из нас и демонстрирует вашу проблему. Другими словами, [mcve] (пожалуйста, прочитайте ссылку). Также поймите, что это не ссылка на код, а скорее соответствующий код, который вы публикуете здесь с вашим вопросом в качестве редактирования. –

+0

'Кнопка, безусловно, добавляется, просто не отображается.' - тогда у вас есть два кадра в вашем приложении. Один, который виден на экране, и другой, который просто сидит в памяти. Обычно это происходит, когда ваш класс расширяет JFrame, а затем вы создаете второй JFrame. Не расширяйте JFrame, и у вас не будет этой путаницы! – camickr

+0

@camickr Вы правы, я действительно дважды создал основной кадр. Я допустил ошибку при вызове конструктора приложения вместо getInstance() в main (main находится внутри приложения, поэтому я смог вызвать конструктор, даже если он был закрыт), поэтому, когда я впервые вызвал getInstance, основной кадр был создан снова , Спасибо за вашу помощь. – user1176999

ответ

0

Я выяснил, в чем проблема. Проблема заключалась в том, что я дважды создавал MainFrame, сначала вызывая конструктор Application main, а затем при вызове Application.getInstance(), поэтому все компоненты, добавленные в MainFrame, были удалены.

 Смежные вопросы

  • Нет связанных вопросов^_^