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.
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