Il y avait un bug java (SWING) a ce propos sous linux.
Le positionnement des fen�tres est decal� de la taille
de la barre de titre.
En fait le bug c'est la non prise en compte de la taille
de la barre de titre, ce qui gen�re d'autres problemes
comme celui de mal positionner la fenetre sur un setBounds.

Je ne sais plus s'il est corrig�, mais cela pourait bien
avoir un rapport avec ton probl�me ... (Cf bugparade chez SUN)

______________________________________________
Jean-Baptiste BRIAUD                    Sysdeo
Software engineer               www.sysdeo.com
                         www.eclipsetotale.com

> -----Message d'origine-----
> De : Herve AGNOUX [mailto:[EMAIL PROTECTED]] 
> Envoy� : jeudi 12 d�cembre 2002 16:04
> � : [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



Répondre à