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