Изменить область содержимого кадра после нажатия кнопки - PullRequest
7 голосов
/ 16 мая 2011

Я хочу иметь возможность установить область содержимого JFrame после нажатия кнопки внутри одного из JPanels этого кадра.

Моя архитектура состоит из контроллера, который создает JFrame и первый JPanel внутри него.Из первого JPanel я вызываю метод: setcontentpane (JPanel jpanel) на контроллере.Однако вместо загрузки переданного JPanel он ничего не делает, кроме удаления всех панелей (см. Код ниже)

ActionListener внутри первого JPanel:

public void actionPerformed(ActionEvent arg0) {
            controller.setpanel(new CustomPanel(string1, string2));
        }

Контроллер:

JFrame frame;

public void setpanel(JPanel panel)
{
    frame.getContentPane().removeAll();
    frame.getContentPane().add(panel);
    frame.repaint();
}

public Controller(JFrame frame)
{
    this.frame=frame;
}

Может кто-нибудь сказать мне, что я делаю не так?Спасибо:)

Ответы [ 3 ]

16 голосов
/ 16 мая 2011

Позвоните, подтвердите, затем перекрасите. Это говорит менеджерам по расположению делать их расположения их компонентов:

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.removeAll();
contentPane.add(panel);
contentPane.revalidate(); 
contentPane.repaint();

Лучше, если вы просто хотите поменять местами JPanels, это использовать CardLayout и заставить его делать грязную работу.

3 голосов
/ 16 мая 2011

Я нашел способ сделать то, что изложил выше.

Реализация метода setpanel следующим образом:

public void setpanel(JPanel panel)
{
frame.setContentPane(panel);
frame.validate();
}

добился цели в моем случае.

Я почти уверен, что мне все еще нужно что-то исправить в моем коде (относительно менеджеров компоновки и предпочтительных размеров, поскольку pack () все еще сжимает окно), но по крайней мере описанный выше метод работает так, как есть:) 1008 *

2 голосов
/ 16 мая 2011

Всякий раз, когда вы изменяете иерархию содержимого фрейма, вы должны вызывать pack().

Из документов:

Устанавливает размер этого окна в соответствии с предпочтительным размероммакеты его подкомпонентов.[...] Окно будет проверено после расчета предпочитаемого размера.

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