"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How Do I Center a Component within a JFrame's Content Pane?

How Do I Center a Component within a JFrame's Content Pane?

Published on 2024-12-23
Browse:903

How Do I Center a Component within a JFrame's Content Pane?

How Can I Properly Center a Component Within a JFrame?

When attempting to draw a rectangular within a JFrame, setting the frame size, resizable property, and the rectangle's coordinates may not result in the rectangle being centered within the frame.

The underlying reason for this discrepancy lies in the frame's decorations, such as a border and title bar. These decorations occupy space within the frame, affecting the positioning of the rectangle.

To ensure proper centering, it is crucial to paint onto the frame's content area rather than directly onto the frame. The content area is essentially the inner portion of the frame, excluding the decorations.

Example Code:

public class CenteredRectangle {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException |
                        IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                // Create a JFrame with a content pane
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.getContentPane().setPreferredSize(new Dimension(800, 400));
                frame.pack();

                // Create a component to be centered
                JPanel panel = new JPanel();
                panel.setBackground(Color.RED);
                panel.setPreferredSize(new Dimension(700, 300));

                // Add the component to the content pane
                frame.getContentPane().add(panel);
                frame.validate();

                // Position the frame at the center of the screen
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

In this example, the JFrame's content area is set to a preferred size of 800x400, while the component to be centered, a JPanel, is set to a preferred size of 700x300. By using the validate() method on the content pane, the component's actual size and position are calculated and applied.

Now, the component should be correctly centered within the JFrame, both horizontally and vertically.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3