folgender Beispielcode (Auszug) funzt nicht.
Der Dialog wird nicht in der Mitte des Bildschirmes angezeigt, sondern
die linke obere Ecke ist (0,0).
Wenn ich die Methode centerScreen in der Klasse VersionDialog belasse
und diese aufrufe, funzt es. Ich will aber centerScreen nicht bei jedem
Dialog neu codieren.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class VersionDialog extends JDialog implements ActionListener
{
boolean result;
public VersionDialog(BuLiControlle controlle, boolean modal)
{
super(controlle, modal);
setTitle(" * * * Version * * *");
getContentPane().setLayout(null);
JLabel label1 = new JLabel();
...
JButton button = new JButton();
...
int w = 320;
int h = 200;
setSize(w,h);
setResizable(false);
controlle.centerScreen(w,h);
}
...
}
*****
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
class BuLiControlle extends JFrame implements ActionListener,
ComponentListener, FocusListener, KeyListener, MouseListener,
MouseMotionListener, WindowListener
{
private BuLiModel model;
private BuLiView view;
...
VersionDialog dlg2;
Dimension dim;
public BuLiControlle (BuLiView v, BuLiModel m)
{
this.view = v;
this.model = m;
}
public void actionPerformed (ActionEvent e)
{
Object source = e.getSource();
...
if (source == view.m_I_Version)
{
dlg2 = new VersionDialog (this,true);
dlg2.setVisible(true);
//warten auf das Schließen des Dialogs
if (dlg2.getResult())
{
//kann leer bleiben, weil Dialog schon vorher
geschlossen wurde
;
}
}
....
}
//Positioniert den Dialog in die Mitte des Bildschirmes
public void centerScreen(int w, int h)
{
dim = getToolkit().getScreenSize();
System.out.println("Die Bildschirmgröße beträgt : " + dim.width
+" mal "+ dim.height);
setLocation((dim.width - w) / 2, (dim.height - h) / 2);
System.out.println("setLocation ist " + (dim.width-w)/2 +" mal
"+(dim.height-h)/2);
}
}
Die System.out.println Zeilen hab' ich nur um zu überprüfen. Und zu
diesem Zeitpunkt ist unter setLocation auch die richtige
Bildschirmposition vorhanden. Wird der Dialog dann aber dargestellt,
wird als linke obere Ecke (0,0) genommen.
Wo gehen mir die Infos verloren??
Gruß
Thomas
"Thomas Hübel" <tee...@rz-online.de> schrieb im Newsbeitrag
news:3A5F46DC...@rz-online.de...
> Hallo,
>
> folgender Beispielcode (Auszug) funzt nicht.
> Der Dialog wird nicht in der Mitte des Bildschirmes angezeigt, sondern
> die linke obere Ecke ist (0,0).
> Wenn ich die Methode centerScreen in der Klasse VersionDialog belasse
> und diese aufrufe, funzt es. Ich will aber centerScreen nicht bei jedem
> Dialog neu codieren.
Dann schreib doch eine Oberklasse MyDialog, in der Deine Methode
centerScreen() vorkommt und vererbe sie jeweils an Deine neu erstellte
Klasse (class VersionDialog extends MyDialog {...
Ich sehe auch nirgends, wo Dein centerScreen() die Instanz von VersionDialog
zentrieren sollte, allerhöchstens das Frame selber...
Ciao
Paco Vicedo
> file://warten auf das Schließen des Dialogs
> if (dlg2.getResult())
> {
> file://kann leer bleiben, weil Dialog schon vorher
> geschlossen wurde
> ;
> }
> }
> ....
> }
>
> file://Positioniert den Dialog in die Mitte des Bildschirmes
> Hallo Thomas
>
> Dann schreib doch eine Oberklasse MyDialog, in der Deine Methode
> centerScreen() vorkommt und vererbe sie jeweils an Deine neu erstellte Klasse
> (class VersionDialog extends MyDialog {...
>
> Ich sehe auch nirgends, wo Dein centerScreen() die Instanz von VersionDialog
> zentrieren sollte, allerhöchstens das Frame selber...
>
> Ciao
>
> Paco Vicedo
>
Hallo Paco,
vielen Dank.
Das mit der eigenen Oberklasse war der letzte Anstoss. Es funzt. Jetzt brauche
ich bei jedem Dialog nur noch die Methode in meiner Oberklasse aufzurufen.
Ich habe allerdings jetzt folgendes festgestellt:
Ist der Dialog modal und ich will im Programm weitermachen, flackert die
Titelzeile des Dialogs etwas. Zuvor (centerScreen() direkt aufgerufen) war dies
nicht der Fall. Aber das stört mich im Moment gar nicht.
Gruß
Thomas