Мне интересно об этом в течение довольно долгого времени.Почему setContentPane() не содержит repaint()?
Я обычно создаю свои программы SWING, имея JFrame
с JPanel
, содержащий содержимое окна, установленное в качестве области содержимого на setContentPane()
. Когда я хочу, чтобы мой контент был заменен другим (например, для получения новой маски после нажатия кнопки), я снова вызываю setContentPane()
и заменяю панель содержимого другой панелью. Но каждый раз, когда я это делаю, мне нужно позвонить repaint()
после setContentPane()
, чтобы сделать видимым изменение, поэтому я создал собственный класс, который я использую для создания фреймов. Этот класс расширяет JFrame
и переопределение setContentPane()
так:
@Override
public void setContentPane(Container c) {
super.setContentPane(c);
revalidate();
repaint();
}
Почему это не реализовано в JFrame
классе по умолчанию? Может быть, у меня плохой побочный эффект?
Какой менеджер макетов вы используете? –
Зачем? Вообще говоря, вы должны установить и покинуть область содержимого как есть. Вы также можете внести дополнительные изменения в пользовательский интерфейс, который вы не хотите планировать перерисовку, пока вы не закончите ... – MadProgrammer
Вы также просите, чтобы вернуться к более чем 15 годам умов разработчиков, которые разработал и написал API. Там требования были совершенно определенно отличны от наших сегодня, просто посмотрите на разницу в концепции JavaFX, например – MadProgrammer