Проблема положения с добавлением чего-либо в JFrame в Java - PullRequest
0 голосов
/ 28 мая 2020

Я хочу напрямую добавить JLabels в JFrame. Я не хочу использовать JPanel. Но у меня проблема с позицией. Я установил макет как null.

Я попытался нарисовать линию, чтобы посмотреть, что происходит.

@Override
public void paint(Graphics g){
    g.setColor(Color.red);
    g.drawLine(0, 31, super.getWidth(), 31);
}

А на самом деле ноль равен 31.

Скриншот чертежа
Drawing screenshot

Почему? И как я могу это исправить?

Ответы [ 2 ]

4 голосов

Я хочу напрямую добавить JLabels в JFrame. Я не хочу использовать JPanel.

Если вы добавляете JLabel "в JFrame", вы добавляете его в contentPane, который почти всегда является JPanel, поэтому 99% время, вы все еще используете JPanel, даже не пытаясь.

Но у меня проблема с позицией. Я установил layout как null.

Что почти всегда плохо. Это означает, что GUI работают не на всех платформах, что противоречит философии и структуре Java.

А на самом деле ноль равен 31.

Почему? ? И как я могу это исправить?

Потому что верхняя часть JFrame занята строкой меню окна ОС. ContentPane начинается на 31 пиксель ниже верха JFrame (в вашем случае - по-разному для разных ОС и разрешений экрана). компоненты - панель содержимого, панель root, стеклянная панель, ... и вместо этого рисуйте внутри метода paintComponent JPanel, который вы либо добавляете в contentPane, либо делаете как contentPane. Тогда 0,0 - это верхний левый угол используемой части вашего главного окна.

Также, пожалуйста, более подробно опишите основную причину, по которой вы пытаетесь избежать использования JPanel. На самом деле ваша проблема может быть проблемой типа XY.

0 голосов
/ 28 мая 2020

Позиции в JFrame относятся к краю окна, а не к панели содержимого. Чтобы получить размеры панели содержимого, используйте getContentPane().getWidth() и getContentPane().getHeight().

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