2013-02-13 3 views
0

Я бродил по Интернету, ища ответ на этот вопрос, но придумал довольно с пустыми руками.При использовании JFrame, откуда приходит метод add()?

Я следую JFrame на практический из университета, и с помощью моих лекций и рекомендации по практическому инструктивному листу у меня есть этот базовый код:

public HelloFrameMenu() 
{ 
    message = "Hello, World!"; 
    label = new JLabel(message); 
    label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE)); 
    add(label, BorderLayout.CENTER); 
    createSouthPanel(); 

    setSize(FRAME_WIDTH, FRAME_HEIGHT); 
} 

Это создает текстовое сообщение на JPanel и выполняет метод createSouthPanel(), который отлично работает и добавляет некоторые списки меню в JFrame.

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

Откуда этот метод?
Почему ему ничего не предшествует?
Какие другие методы можно использовать как это?

ответ

2

Если вы посмотрите на javadoc, вы увидите, что нет add метода в JFrame. Однако несколько методов add наследуются от Container и Component, которые перечислены в методах , унаследованных от ....

+0

Буквально, как вы писали, я заметил это в нижней части Java API. Duh! Тем не менее, почему ему ничего не должно предшествовать? например Container.add или что-то (обратите внимание, что я НИКОГДА не использовал контейнеры раньше). –

+0

@AndrewMartin Поскольку JFrame является подклассом Container, он автоматически наследует все его методы. Он не имеет ничего общего с контейнерами или графическим интерфейсом, это просто способ наследования работает на Java. – assylias

+0

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

2

JFrame#add - метод экземпляра, который унаследован от java.awt.Container. Мне не предшествует мой экземпляр здесь, поскольку вы непосредственно подклассифицировали JFrame. Обычно вы не добавляя никаких новых функций в кадре, поэтому предпочтительный подход заключается в создании экземпляра непосредственно и использование:

JFrame myFrame = new JFrame(); 
... 
myFrame.add(...); 

Отъезд javadoc для всех доступных методов.

+0

Спасибо за это - каждый раз, когда я чувствую, что я начинаю двигаться мимо всех начинающих вопросов, что-то тянет меня обратно! –

0

Вы можете думать об этом как «this.add», поскольку он является унаследованным членом Container.

0

Класс HelloFrameMenu должен был бы продлить JFrame, а метод add исходит от Container и используется для добавления визуальных компонентов к раме. Было бы более понятным, если бы add и setSize были префиксом super (например, super.add(...)), что я всегда должен был обозначать тем, что этот метод поступает из суперкласса.

+0

Я согласен - помог бы маленьким нообам вроде меня! –

+0

Не только нообы, но и все - проще всего схватить код. Особенно, если у вас есть узкий диапазон внимания (как и все в наше время) :) LOL – amphibient

0

Это связано с наследованием. Java - это объектно-ориентированный язык, который означает, что (почти) все является объектом.

Затем объекты могут быть расположены в иерархии.
Например, объект Cat может расширить объект Animal. Он наследует все поведение (методы) Animal и может добавлять свои собственные.

В вашем случае JFrame extends Container и Container имеет метод добавления.

Смежные вопросы