Центрирование JLabel в JPanel

У меня есть панель, производная от JPanel. У меня есть пользовательский элемент управления, полученный из JLabel. Я пытаюсь центрировать этот пользовательский JLabelна своей панели.

Единственный известный мне способ сделать это, который будет работать, — это использовать нулевой макет ( setLayout(null)), а затем вычислить пользовательскую точку JLabel setLocation(), чтобы что он в нужном месте.

Пользовательский JLabelфизически перемещается с одной панели на эту панель в этом приложении, и я считаю, что расположение, ранее установленное в setLocation, влияет на вещи. Однако, когда я устанавливаю его на (0,0), компонент поднимается в верхний левый угол.

BorderLayoutне работает, потому что, когда только 1 компонент предоставляется и помещается в BorderLayout.CENTER, центральная часть расширяется, чтобы заполнить все пространство.

В примере, который я вырезал и вставил с другого сайта, использовались BoxLayoutи component.setAlignmentX(Component.CENTER_ALIGNMENT). Это тоже не сработало.

В другом ответе упоминалось переопределение функции панели getInset()(думаю, так она называлась), но это оказалось тупиком.

Пока что я работаю с панелью с макетом GridBagLayoutи включаю объект GridBagConstraints, когда вставляю пользовательскую JLabelв свою панель. Однако это неэффективно. Есть ли лучший способ центрировать JLabelв моем JPanel?

19
задан Fund Monica's Lawsuit 30 March 2015 в 12:43
поделиться