Как закрыть рамку, но открыть новую рамку? (Повторно) - PullRequest
0 голосов
/ 01 июня 2010

Я пытаюсь закрыть кадр, но открыть новый кадр.

У моего приложения есть страница A, JPanel с некоторыми элементами управления и определенной кнопкой, и когда пользователь нажимает кнопку, я хочу, чтобы страница A исчезла, а страница B появилась (страница B имеет элементы управления, которые зависят от выбора которые сделаны пользователем на странице A).

Об этом спрашивали раньше , но не было удовлетворительного ответа. Внутри реализации ActionListener, а именно public void ActionPerformed(ActionEvent e) из моего класса jpanelForPageA, я могу с комфортом написать this.setVisible(false), но как мне установить страницу B в видимое состояние?

Ответы [ 3 ]

1 голос
/ 01 июня 2010

Вы можете сделать удаление панели a, а затем добавить панель b трюк. Другой - использовать CardLayout.

Когда вы создаете свои панели, вы добавляете их в содержащий JPanel, который вы инициализируете CardLayout:

JPanel container = new JPanel(new CardLayout());
containter.add(getPanelA(), "PANEL_A"); 
containter.add(getPanelB(), "PANEL_B"); 

Затем в вашем actionPerformed, когда вы хотите показать panelB, вы делаете это:

CardLayout cl = (CardLayout) container.getLayout();
cl.show("PANEL_B");

Взгляните на этого урока , чтобы узнать больше идей.

0 голосов
/ 01 июня 2010

Вы должны удалить Panel A из фрейма, добавить Panel B в фрейм и вызвать недействительным на фрейме (или содержащую панель). По крайней мере, в Swing, я не уверен насчет AWT, там вам может потребоваться перекрасить или подтвердить, а не сделать недействительным.

Вы также можете просто создать новый JFrame и расположить тот, который содержит панель A.

0 голосов
/ 01 июня 2010

По какой-то причине я не могу заставить setVisible () работать так, чтобы я выполнял то, что вы описываете. Вместо этого я делаю это:

frame.remove(panelA);
frame.add(panelB);

"frame" - это просто JFrame, в который вы хотите поместить панели. Попробуйте, если метод setVisible () не работает:)

На исходный вопрос все, что вам нужно сделать, это (как сказал aioobe):

panelB.setVisible(true);

((кстати, размещение некоторого вашего кода поможет мне понять, что вы пытаетесь спросить))

И это всего лишь предположение относительно того, что вы пытаетесь сделать - я предполагаю, что ваши JPanels находятся в разных классах. Затем вам нужно будет сделать это:

class pages extends JFrame implements ActionListener
{
    public pages()
    {
        panelA a = new panelA(this)
    }

    changeToA(panelB b)
    {
        remove(panelB);
        add(new panelA(this));
    }        

    changeToB(panelA a)
    {
        remove(panelA);
        add(new panelB(this));
    }
}

class panelA extends JPanel implements ActionListener
{
    pages p;
    public panelA(pages p)
    {
        this.p = p
    }
    // all that actionlistener code stuff
        p.changeToB(this);
}

class panelB extends JPanel implements ActionListener
{
    pages p;
    public panelB(pages p)
    {
        this.p = p
    }
    // all that actionlistener code stuff
        p.changeToA(this);
}

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

Надеюсь, я помог:)

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