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.
The above is the detailed content of How Do I Center a Component within a JFrame's Content Pane?. For more information, please follow other related articles on the PHP Chinese website!