Maison > Java > javaDidacticiel > Comment centrer un rectangle dans un cadre Java, en tenant compte des décorations du cadre ?

Comment centrer un rectangle dans un cadre Java, en tenant compte des décorations du cadre ?

Barbara Streisand
Libérer: 2024-12-15 21:26:14
original
801 Les gens l'ont consulté

How to Center a Rectangle within a Java Frame, Accounting for Frame Decorations?

Positionnement d'un rectangle centré dans un cadre Java

En Java, lorsque vous tentez de dessiner un rectangle dans un cadre, vous assurer que son placement central peut être un défi. Malgré la définition de valeurs spécifiques de x, y, de largeur et de hauteur, le rectangle peut apparaître décalé. Pour résoudre ce problème, il est crucial de comprendre les éléments de décoration du cadre.

Le problème avec les décorations du cadre

Les cadres incluent généralement des décorations telles qu'une bordure et une barre de titre, qui occuper l'espace à l'intérieur des limites du cadre. Par conséquent, peindre directement sur le cadre, au lieu de sa zone de contenu, peut donner l'impression que le rectangle est positionné trop haut.

Solution : peindre sur la zone de contenu du cadre

Pour centrer correctement le rectangulaire, concentrez-vous sur la peinture sur la zone de contenu du cadre, en excluant essentiellement les décorations. La zone de contenu est la région désignée pour le placement des composants, offrant un point de référence cohérent et précis pour le positionnement.

Exemple d'implémentation

Le code suivant montre comment positionner correctement un rectangulaire au centre d'un cadre, s'adaptant aux décorations du cadre :

import javax.swing.*;
import java.awt.*;

public class CenteredRectangle extends JFrame {

    public static void main(String[] args) {
        new CenteredRectangle();
    }

    public CenteredRectangle() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        // Set the content pane's preferred size
        setContentPane(new PaintablePanel());
        pack();

        // Center the frame on the screen
        setLocationRelativeTo(null);

        // Make the frame visible
        setVisible(true);
    }

    public class PaintablePanel extends JPanel {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(800, 400);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            // Draw the rectangle centered within the content area
            paintRectangle(g);
        }

        private void paintRectangle(Graphics g) {
            g.setColor(Color.RED);
            int x = (getWidth() - 700) / 2;
            int y = (getHeight() - 300) / 2;
            g.drawRect(x, y, 700, 300);
        }
    }
}
Copier après la connexion

Dans cet exemple, un nouveau panneau est créé et défini comme contenu du cadre volet. Le panneau fournit la zone dédiée au dessin des composants. La méthode getPreferredSize() garantit que le panneau a une taille préférée spécifique, tandis que la méthode paintComponent() est remplacée pour personnaliser le comportement du dessin. La méthode paintRectangle() calcule ensuite le décalage approprié en fonction des dimensions de la zone de contenu, ce qui donne un rectangle centré.

En utilisant la zone de contenu du cadre et en ajustant les décorations du cadre, cette approche positionne avec précision le rectangulaire dans la zone souhaitée. emplacement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal