Означает ли getContentPane().add() то же самое, что add()

#java #swing #user-interface #jframe

#java #swing #пользовательский интерфейс #jframe

Вопрос:

Означает ли getContentPane().add() то же самое, что add()?

 public class TestFrame extends JFrame{
    public TestFrame() {
        JLabel label = new JLabel("jo");
        getContentPane().add(label);
        add(label);
    }
}
  

Комментарии:

1. JFrame API ответит на этот вопрос быстрее, чем задавать его здесь. 🙂

2. Привет, я сначала попробовал с API, но там не было подсказки.

3. @user268755 если вы находитесь в eclipse, нажмите add() и нажмите shift f2, затем проделайте то же самое с getContentPane().add() в части add() — вы окажетесь в той же точке документа API, где показано, что это один и тот же точный вызов.

4. Действительно, я это сделал, но вы не знаете, возвращает ли JFrame getContentPane () другие объекты, поэтому я спросил об этом здесь.

Ответ №1:

Означает ли getContentPane().add() то же самое, что add()?

Да, начиная с 1.5 .

Комментарии:

1. где ссылка на API для этого?

2. @user268755: Проверьте преамбулу на наличие версии JFrame 1.4 в отличие от версии JFrame 1.5 . Воспользуйтесь Google-fu, чтобы найти примечания к выпуску 1.5, которые поддерживают это изменение.

3. спасибо, я всегда использовал локальный javadoc версии 1.6, спасибо за подсказку 1.4.

4. Здесь также есть полезное примечание .

Ответ №2:

В основном. Чтобы сделать все «проще», addImpl было изменено на пересылку в область содержимого, но в редких угловых случаях это не так (например, панель содержимого должна быть каким-то образом добавлена).

Этот метод переопределяется для условной пересылки вызовов в ContentPane.

Ответ №3:

Да, потому что, если вы заметили, они оба из

 Class Container
java.lang.Object
  java.awt.Component
      java.awt.Container
add()
  

JLabel расширяет контейнер, а getContentPane() возвращает контейнер.