Я хочу напрямую добавить 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.