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