Maison >Java >javaDidacticiel >Comment centrer avec précision un JFrame redimensionnable et détecter les collisions avec ses bords ?

Comment centrer avec précision un JFrame redimensionnable et détecter les collisions avec ses bords ?

DDD
DDDoriginal
2024-12-04 09:29:11723parcourir

How to Accurately Center a Resizable JFrame and Detect Collisions with its Edges?

Résoudre le positionnement exact du centre dans un JFrame redimensionnable

Votre requête présente deux défis : une détection précise des collisions avec les bords du cadre et la détermination du centre exact, quelle que soit la taille de l'écran.

Détection de collision Correction

Le décalage de 10 pixels observé lors de la détection de collision provient probablement d'une mauvaise compréhension des dimensions du cadre. Un JFrame comprend une bordure, un JRootPane et d'autres composants autour du volet de contenu réel. Par conséquent, vous devez ajuster vos calculs pour tenir compte de la largeur et de la hauteur de la bordure.

Pour obtenir la région exacte à peindre, utilisez la formule :

Width - border.width
Height - border.height

Détermination exacte du centre de l'écran

Pour trouver le centre exact de l'écran, considérez le suivants :

  • Perspective du cadre :Le centre est à (100 x 100) en fonction des dimensions du cadre.
  • Perspective du volet de contenu :Le le centre est à (92 x 81) en fonction de la valeur du volet de contenu. dimensions.

Le choix de la valeur à utiliser dépend de votre objectif :

  • Pour positionner le cadre, utilisez le point central du cadre.
  • Pour peinture, utilisez le point central du volet de contenu.

Méthode de centrage du Cadre

Pour centrer facilement le cadre sur l'écran, appelez Window#setLocationRelativeTo(null).

Vous pouvez également utiliser la formule suivante :

JFrame frame = ...;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int x = (screenSize.width - frame.getWidth()) / 2;
int y = (screenSize.height - frame.getHeight()) / 2;
frame.setLocation(x, y);

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!

Déclaration:
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