контейнер, компонент и видимое окно - PullRequest
1 голос
/ 07 ноября 2010

Я тестировал следующий код, используя Frame , но когда я пытался нарисовать отдельную линию без каких-либо границ, кнопок и т. Д., Я обнаружил, что программа работает без ошибок и не показывает никаких строк. Есть код:

package helloworld;

import java.awt.*;

class Line extends Component {
    public void paint(Graphics g) {
        g.drawLine(0, 0, getWidth(), getHeight());
    }
}

public class Main {
    public static void main(String[] args) {
        Container c = new Container();
        c.add(new Line());
        c.setSize(400, 300);
        c.setVisible(true);
    }
}

Может быть, я что-то узнал неправильно, но если я использую Frame f = new Frame () , это работает нормально. Итак, что я делаю не так?

1 Ответ

3 голосов
/ 07 ноября 2010

По умолчанию фреймы имеют макет (BorderLayout), который определяет размеры компонентов, которые вы вставляете в них, чтобы заполнить фрейм.

Контейнеры не имеют никакого макета по умолчанию, поэтому Линия не перемещается и не измеряется - она ​​будет там, в 0,0 и нулевой ширине и высоте.Так что вы его не увидите.

См. Учебник по менеджерам компоновки на http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html

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