Maison >Java >javaDidacticiel >Pourquoi les JFrames non redimensionnables se chevauchent-ils lors de l'utilisation de Windows Aero ?
Bordures et positionnement des fenêtres non redimensionnables
Dans les situations où des JFrames non redimensionnables sont utilisés et où Windows Aero est activé, le comportement de la méthode setLocation peut sembler incohérent lorsque l'on considère les bordures de fenêtre.
Pour illustrer ce comportement, considérons le code suivant extrait :
import java.awt.Rectangle; import javax.swing.JFrame; public class FrameBorders { public static void main(String[] args) { JFrame frame1 = new JFrame("frame 1"); JFrame frame2 = new JFrame("frame 2"); frame1.setResizable(false); frame2.setResizable(false); frame1.setVisible(true); Rectangle bounds = frame1.getBounds(); frame2.setLocation(bounds.x + bounds.width, bounds.y); frame2.setVisible(true); } }
Avec ce code, vous pouvez vous attendre à ce que frame2 soit positionné à droite de frame1. Cependant, lorsque Windows Aero est activé, les bordures des deux cadres se chevauchent.
Explication et solution
Windows Aero applique un style différent aux fenêtres non redimensionnables, ce qui entraîne une bordure plus épaisse. Étant donné que la méthode setLocation prend en compte les dimensions brutes de la fenêtre sans tenir compte de l'épaisseur de la bordure, elle positionne incorrectement les fenêtres, entraînant un problème de chevauchement.
Pour obtenir le comportement souhaité de deux cadres non redimensionnables positionnés côte à côte sans En superposant les bordures, vous pouvez :
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!