2010-11-24 5 views
2

J'ai un JLayeredPane, et dans JLayeredPane est un JInternalFrame. Ce dont j'ai besoin, ce sont les limites (position x, position y, largeur, hauteur) du volet contenu dans JInternalFrame. Les limites doivent être en relation avec le JLayeredPane. Mon problème est les frontières, la barre de titre, et je ne suis pas sûr quoi d'autre du JInternalFrame dérange mon calcul. C'est quelques pixels de moins.Obtention des coordonnées d'un composant dans Java

Voici comment j'essaie de le calculer. Ce code est dans le JInternalFrame:

 

Rectangle area = new Rectangle(
       getX() + 2, //The x coordinate of the JInternalFrame + 2 for the border 
       getY() + ((javax.swing.plaf.basic.BasicInternalFrameUI) getUI()).getNorthPane().getHeight(), //The Y position of the JinternalFrame + theheight of the title bar of the JInternalFrame 
       getContentPane().getWidth() - 2, //The width of the Jinternals content pane - the border of the frame 
       getContentPane().getHeight() //the height of the JinternalFrames content pane 
       ); 
 

Je dois obtenir l'emplacement du volet de contenu du cadre interne. alt text

Répondre

6

Coordonnées en ce qui concerne quoi? L'écran? La fenêtre? L'appel getLocation() vous donnera les coordonnées relatives au parent du composant dans la hiérarchie de la fenêtre.

SwingUtilities a plusieurs méthodes pour transformer les coordonnées d'une trame de référence à une autre. Donc, pour compenser la barre de titre et le cadre, vous pouvez faire ceci:

JInternalFrame iframe = ... 
Container c = iframe.getContentPane(); 
Rectangle r = c.getBounds(); 
r = SwingUtilities.convertRectangle(c.getParent(), r, iframe.getParent()); 
+0

Très cool. Je savais qu'il y avait un moyen simple de le faire. Cela a fonctionné parfaitement. – user489041

2

La méthode getBounds() de JInternalFrame renvoie un rectangle avec les coordonnées dont vous avez besoin. Pourquoi ne pas simplement faire ce qui suit:

{ 
     ... 
     JInternalFrame iframe = ...; 
     Rectangle r = new Rectangle(iframe.getBounds()); 
} 

De cette façon, vous n'avez pas besoin de calculer manuellement les limites.

+0

Le problème avec ceci est que cela me donnera les limites qui incluent la barre de titre du cadre interne et aussi la bordure. J'ai besoin des limites du volet de contenu uniquement. Mais j'ai besoin de la coordonnée x et de la coordonnée y pour l'emplacement du volet contenu dans JLayeredPane. – user489041

Questions connexes