Swing: компоненты экрана не обновляются должным образом - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть средняя панель, которая отображает панель 1 с 6 кнопками.При нажатии на кнопку другие компоненты отображаются в mainPanel и, наконец, возвращаются обратно на панель 1.

Проблема, с которой я сталкиваюсь здесь: компоненты не отображаются сразу - мне нужно переместить курсор, чтобы сделать его видимым,Код, который я использую для установки панелей:

public void SetMainPanel(JPanel panel) {
    middlePanel.removeAll();
    this.middlePanel = panel;
    panel.setVisible(true);
    this.middlePanel.setVisible(true);
    mainPanel.add(middlePanel, BorderLayout.CENTER);
    middlePanel.revalidate();
    middlePanel.repaint();
    mainPanel.revalidate();
    mainPanel.repaint();
}

См. Видим ли переданная панель и средняя панель, в которой она добавлена.Обновить и проверить middlePanel и mainPanel, которые содержат middlePanel.Но почему эта проблема?

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

Ответы [ 2 ]

5 голосов
/ 18 ноября 2011

Из ответа Я спросил кого-то еще, когда его спросили о динамическом добавлении / удалении компонентов:

При динамическом добавлении / удалении компонентов из контейнера это необходимо вызвать revalidate () / validate () и repaint () после этого. Первый заставит контейнер разметить его компоненты снова и последний удалит все визуальные «артефакты».

И, кстати, в этом сценарии совершенно не нужно вызывать updateUI(). И в качестве предложения, возможно, использование другого менеджера компоновки (например, CardLayout) поможет вам лучше.

2 голосов
/ 18 ноября 2011

Попробуйте позвонить mainPanel.repaint()

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