Centering a JLabel on a JPanel

后端 未结 5 824
花落未央
花落未央 2020-11-22 14:32

I\'m using the NetBeans GUI builder to handle my layout (I\'m terrible with LayoutManagers) and am trying to place a simple JLabel so that it is always centered (horizontall

相关标签:
5条回答
  • 2020-11-22 14:57

    By using Borderlayout, you can put any of JComponents to the CENTER area. For an example, see an answer to Stack Overflow question Get rid of the gap between JPanels. This should work.

    0 讨论(0)
  • 2020-11-22 15:01

    Here are four ways to center a component:

    4 Centered Components

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    class CenterComponent {
    
        public static JLabel getLabel(String text) {
            return getLabel(text, SwingConstants.LEFT);
        }
    
        public static JLabel getLabel(String text, int alignment) {
            JLabel l = new JLabel(text, alignment);
            l.setBorder(new LineBorder(Color.RED, 2));
            return l;
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    JPanel p = new JPanel(new GridLayout(2,2,4,4));
                    p.setBackground(Color.black);
                    p.setBorder(new EmptyBorder(4,4,4,4));
    
                    JPanel border = new JPanel(new BorderLayout());
                    border.add(getLabel(
                        "Border", SwingConstants.CENTER), BorderLayout.CENTER);
                    p.add(border);
    
                    JPanel gridbag = new JPanel(new GridBagLayout());
                    gridbag.add(getLabel("GridBag"));
                    p.add(gridbag);
    
                    JPanel grid = new JPanel(new GridLayout());
                    grid.add(getLabel("Grid", SwingConstants.CENTER));
                    p.add(grid);
    
                    // from @0verbose
                    JPanel box = new JPanel();
                    box.setLayout(new BoxLayout(box, BoxLayout.X_AXIS ));
    
                    box.add(Box.createHorizontalGlue());
                    box.add(getLabel("Box"));
                    box.add(Box.createHorizontalGlue());
                    p.add(box);
    
                    JFrame f = new JFrame("Streeeetch me..");
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.setContentPane(p);
                    f.pack();
                    f.setLocationByPlatform(true);
                    f.setVisible(true);
                }
            });
        }
    }
    
    0 讨论(0)
  • 2020-11-22 15:03

    Even with BoxLayout you can achieve that:

    JPanel listPane = new JPanel();
    listPane.setLayout(new BoxLayout(listPane, BoxLayout.X_AXIS ));
    
    JLabel label = new JLabel();
    listPane.add(Box.createHorizontalGlue());
    listPane.add(label);
    listPane.add(Box.createHorizontalGlue());
    

    mKorbel's solution is perfect for your goal. Anyway I always like to suggest BoxLayout because it's very flexible.

    0 讨论(0)
  • 2020-11-22 15:04

    There's many ways to do this, depending on the layout manager(s) you use. I suggest you read the Laying Out Components Within a Container tutorial.

    I believe the following will work, regardless of layout manager:

    JLabel.setHorizontalAlignment(SwingConstants.CENTER)

    0 讨论(0)
  • 2020-11-22 15:05

    Mara: "thanks for your response, however the NetBeans GUI Build uses GroupLayout and this is not overridable."

    Not true! Right click anywhere inside JFrame (or any other GUI container) in NetBeans GUI builder and select "Set Layout". By default is selected "Free Design", which is Group layout, but you can select any other layout including Border layout as advised by mKorbel.

    0 讨论(0)
提交回复
热议问题