Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Centering a JLabel in a JPanel

I have a panel derived from JPanel. I have a custom control derived from JLabel. I am attempting to center this custom JLabel on my panel.

The only way I know to do this that will work is to use the a null layout (setLayout(null)) and then calculate the custom JLabel's setLocation() point so that it's in the right spot.

The custom JLabel is physically moved from one panel to this panel in this app and I believe the location previously set in setLocation is affecting things. However when I set it to (0,0) the component goes up into the upper left corner.

BorderLayout doesn't work because when only 1 component is provided and placed into BorderLayout.CENTER, the central section expands to fill all of the space.

An example I cut and pasted from another site used BoxLayout and component.setAlignmentX(Component.CENTER_ALIGNMENT). This didn't work either.

Another answer mentioned overriding the panel's getInset() function (I think that's what it was called), but that proved to be a dead end.

So far I'm working with a panel with a GridBagLayout layout and I include a GridBagConstraints object when I insert the custom JLabel into my panel. This is inefficient, though. Is there a better way to center the JLabel in my JPanel?

like image 783
Shackleford Avatar asked Mar 22 '12 19:03

Shackleford


People also ask

How do you center a JLabel in JPanel Borderlayout?

You just need to add your labels in a JPanel which uses a layout that aligns the labels at the center, like GridBagLayout does. Your first label will have gridx = 0 and gridy = 0 , the second label will have gridx = 0 and gridy = 1 .

Can you put a JLabel on a JPanel?

Generally JLabel objects are added to JPanel objects.

How do I set text to center in JLabel?

setAlignmentX(CENTER_ALIGNMENT); // text. setAlignmentY(CENTER_ALIGNMENT); // text. setHorizontalAlignment(JLabel. CENTER); // text.

How do you center a panel in Java?

JPanel MUST be centered inside the JFrame. setPreferredSize() method.


1 Answers

Set GridBagLayout for JPanel, put JLabel without any GridBagConstraints to the JPanel, JLabel will be centered

enter image description here

example

import java.awt.*; import javax.swing.*;  public class CenteredJLabel {      private JFrame frame = new JFrame("Test");     private JPanel panel = new JPanel();     private JLabel label = new JLabel("CenteredJLabel");      public CenteredJLabel() {         panel.setLayout(new GridBagLayout());         panel.add(label);         panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);         frame.add(panel);         frame.setSize(400, 300);         frame.setLocationRelativeTo(null);         frame.setVisible(true);     }      public static void main(String[] args) {         EventQueue.invokeLater(new Runnable() {              @Override             public void run() {                 CenteredJLabel centeredJLabel = new CenteredJLabel();             }         });     } } 
like image 193
mKorbel Avatar answered Sep 30 '22 20:09

mKorbel