essaie peut-être cela : après avoir rendu visible la fenêtre Insets ins = getInsets();
ensuite, quand tu veux positionner la fenêtre, soustrait ins.top et ins.left aux coordonnées où tu souhaites placer la fenêtre Anthony -----Message d'origine----- De : Herve AGNOUX [mailto:[EMAIL PROTECTED]] Envoyé : Thursday, December 12, 2002 4:04 PM À : [EMAIL PROTECTED] Objet : Les environnements graphiques et swing Bonjour, C'est un peu la suite de mon problème avec TWM :-) Je m'aperçois que je suis super ennuyé avec mon positionnement de fenêtre. En fait, même KDE refuse de positionner ma fenêtre à l'endroit où je veux. Je me suis fait un petit programme de test où je simule le paramètre geometry, pour pouvoir placer une fenêtre n'importe où à l'écran. J'utilise setBounds pour placer la fenêtre, et getBounds pour relire sa position. Le getBounds est rarement égal au setBounds ! Et d'après le pifômètre, la valeur que me renvoie getBounds est juste. A première vue, KDE à tendance à tout me décaler de 20 pixels vers le bas ; si je veux positionner ma fenêtre en (0,0), il faut que je la positionne en (-4,-20). Bref, qu'est ce que c'est que ce bazard !? Faut-il établir entre setBounds et getBounds un correctif de gestion de marge ??? Connaissez-vous un pattern ??? Mon petit programme de test pour ceux que ça intéresse : /* * TestGeometry.java * * Created on 12 décembre 2002, 11:58 */ package beans; import java.awt.*; /** * * @author herve */ public class TestGeometry extends javax.swing.JFrame { /** Creates new form TestGeometry */ public TestGeometry() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() { jPanel1 = new javax.swing.JPanel(); jpGeometry = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jtGeometry = new javax.swing.JTextField(); jpPosition = new javax.swing.JPanel(); jlPosition = new javax.swing.JLabel(); jlErreur = new javax.swing.JLabel(); getContentPane().setLayout(new java.awt.FlowLayout()); addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(java.awt.event.ComponentEvent evt) { formComponentResized(evt); } public void componentMoved(java.awt.event.ComponentEvent evt) { formComponentMoved(evt); } }); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); jPanel1.setLayout(new java.awt.GridLayout(3, 1)); jLabel1.setText("-geometry : "); jpGeometry.add(jLabel1); jtGeometry.setColumns(10); jtGeometry.setText("XxY+/-?+/-?"); jtGeometry.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jtGeometryActionPerformed(evt); } }); jpGeometry.add(jtGeometry); jPanel1.add(jpGeometry); jlPosition.setText("x=?, y=?, l=?, h=?"); jpPosition.add(jlPosition); jPanel1.add(jpPosition); jlErreur.setForeground(new java.awt.Color(255, 102, 102)); jPanel1.add(jlErreur); getContentPane().add(jPanel1); pack(); } private void jtGeometryActionPerformed(java.awt.event.ActionEvent evt) { // Add your handling code here: geometry(jtGeometry.getText()); } private void formComponentResized(java.awt.event.ComponentEvent evt) { // Add your handling code here: affichePosition(); } private void formComponentMoved(java.awt.event.ComponentEvent evt) { // Add your handling code here: affichePosition(); } /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } // sans les regexp c'est pas facile... private void geometry(String elle) { Rectangle r; int i, ix, pp; String sw, sh, sTaille, sPosition, sPosX, sPosY; int iPosSignX, iPosSignY; r = new Rectangle(); for (i = 0; i < elle.length(); i++) if ((elle.charAt(i) == '+') || (elle.charAt(i) == '-')) break; if (i == elle.length()) { jlErreur.setText("Pas de +/- ?"); return; } sTaille = elle.substring(0, i); sPosition = elle.substring(i); ix = sTaille.indexOf('x'); if (ix < 0) { jlErreur.setText("pas de x ?"); return; } sw = sTaille.substring(0, ix); r.width = Integer.parseInt(sw); sh = sTaille.substring(ix+1); r.height = Integer.parseInt(sh); for (pp = 1; pp < sPosition.length(); pp++) { if ((sPosition.charAt(pp) == '+') || (sPosition.charAt(pp) == '-')) break; } if (pp == sPosition.length()) jlErreur.setText("pas de position en Y ?"); sPosX = sPosition.substring(1, pp); sPosY = sPosition.substring(pp+1); iPosSignX = 0; iPosSignY = pp; if (sPosition.charAt(iPosSignX) == '-') sPosX = "-"+sPosX; r.x = Integer.parseInt(sPosX); if (sPosition.charAt(iPosSignY) == '-') sPosY = "-"+sPosY; r.y = Integer.parseInt(sPosY); System.out.println("r="+r); setBounds(r); } private void affichePosition() { Rectangle r; r = getBounds(); jlPosition.setText("x="+r.x+", y="+r.y+", l="+r.width+", h="+r.height); } /** * @param args the command line arguments */ public static void main(String args[]) { TestGeometry tg; boolean nok; tg = new TestGeometry(); tg.show(); nok = true; System.out.println("-"+args.length); if (args.length == 2) { if ("-geometry".equals(args[0])) { tg.geometry(args[1]); nok = false; } } if (nok) System.out.println ("java beans.TestGeometry -geometry XxY+/-longueur+/-hauteur"); tg.affichePosition(); } // Variables declaration - do not modify private javax.swing.JPanel jpGeometry; private javax.swing.JTextField jtGeometry; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jlPosition; private javax.swing.JLabel jlErreur; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jpPosition; // End of variables declaration } -- SARL diaam informatique - 04 50 77 12 60 Ingenierie, développements de systèmes d'information http://www.diaam-informatique.com