Стереть панель содержимого Swing / панель и отобразить новую панель - PullRequest
5 голосов
/ 09 февраля 2011

Я создал апплет, в котором при нажатии кнопки «Забыли пароль» я удаляю текущий JPanel в апплете и создаю новый JPanel, который отображает JComponents, связанные с восстановлением / забыванием пароля.

Я могу успешно очистить JPanel с помощью .removeAll (); НО после того, как я создаю все свои новые JComponents и добавляю их на панель содержимого (основной JPanel), апплет просто становится серым и не показывает новый JPanel и компоненты UNLESS Я изменяю размер апплет, затем перерисовывает и работает.

Я пытался поместить .invalidate () после того, как создал все новые JComponents, но это все еще не обновляет апплет?

Как сделать так, чтобы мой JPanel отображался после очистки его с помощью .removeAll () и добавления к нему различных J-компонентов?

Код:

public class App extends JApplet
{
    JPanel mainPanel; 

    public void init()
    {
        SwingUtilities.invokeAndWait( new Runnable() {
            public void run()
            {
                showLoginPanel(); // this shows fine on loading
            }
        });

    }

    public void showForgotPassPanel()
    {
        mainPanel.removeAll();

        mainPanel = (JPanel) getContentPane();
        Box hBox  = Box.createHorizontalBox();
        Box vBox  = Box.createVerticalBox();
        mainPanel.setLayout( new BorderLayout() ); 

        ... create components

        ... add components to mainPanel

        mainPanel.invalidate(); // doesn't make new layout visible, not unless I resize the applet
    }
}

Ответы [ 2 ]

5 голосов
/ 09 февраля 2011

Используйте mainPanel.revalidate(); и / или mainPanel.repaint(); методы.

0 голосов
/ 09 февраля 2011

Еще один «чистый» вариант - поменять местами представления с помощью CardLayout.Это делает всю грязную работу за вас за кулисами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...