hiho!
meine applikation speichert beim schliessen des programmes die daten in ein xml-file.
während diesem speichern möchte ich gerne einen kleinen dialog modal anzeigen, in welchem eine kurze meldung steht dass die daten gespeichert werden. anschliessend wird das programm beendet.
per WindowListener und windowClosing-Event funktioniert das einzeigen des dialoges prächtig.
doch leider will das zeichnen des dialoges nicht richtig klappen (es wird einfach eine leere, graua fläche gezeigt)
hier meine idee:
beim instanzieren des dialoges wird ein ActionListener übergeben, welcher den auszuführenden code enthält (in meinem falle irgendwelche anweisungen fürs speichern der daten).
nach dem anzeigen des dialoges wird dann ein actionPerformed an den listener geschickt und der code somit ausgeführt.
hat jemand eine idee wie man dies eleganter lösen könnte, oder aber eine lösung für mein oben geschildertes problem?
vielen dank im voraus & greetz
m@nu
meine applikation speichert beim schliessen des programmes die daten in ein xml-file.
während diesem speichern möchte ich gerne einen kleinen dialog modal anzeigen, in welchem eine kurze meldung steht dass die daten gespeichert werden. anschliessend wird das programm beendet.
per WindowListener und windowClosing-Event funktioniert das einzeigen des dialoges prächtig.
doch leider will das zeichnen des dialoges nicht richtig klappen (es wird einfach eine leere, graua fläche gezeigt)
hier meine idee:
Code:
/*
* Created on 19.05.2005
*/
package manu.drivesync.gui.reusable.dialogs;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* @author Manuel Alabor
*/
public class JWaitDialog extends JDialog {
/* GUI-Komponenten: */
private JLabel lblMessage = new JLabel("");
/* Objekte: */
private ActionListener actionListener;
/**
* @param owner "Besitzer" des Dialoges
* @param message Nachricht
* @param actionListener Auszuführender Code
*/
public JWaitDialog(JFrame owner, String message, ActionListener actionListener) {
/* Initialisieren: */
super(owner);
lblMessage.setText(message);
this.actionListener = actionListener;
addWindowListener(new windowListener());
initGui();
}
// Initialisierung ---------------------------------------------------------
private void initGui() {
/* Dialog anpassen: */
setResizable(false);
setModal(true);
setSize(150,60);
/* Message anordnen: */
JPanel contentPane = (JPanel)getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(lblMessage, BorderLayout.CENTER);
}
// Überschreibungen --------------------------------------------------------
/**
* show-Methode überschreiben damit JWaitDialog immer zentriert auf
* owner angezeigt wird.
*/
public void show() {
Component owner = getOwner();
Dimension d = owner.getSize();
Point p = owner.getLocation();
setLocation(((d.width - getWidth()) / 2) + p.x, ((d.height - getHeight()) / 2) +p.y);
super.show();
}
// Hilfsklassen ------------------------------------------------------------
private class windowListener extends WindowAdapter {
public void windowOpened(WindowEvent arg0) {
actionListener.actionPerformed(new ActionEvent(this, 0, "waitDialogAction"));
dispose();
}
}
}
beim instanzieren des dialoges wird ein ActionListener übergeben, welcher den auszuführenden code enthält (in meinem falle irgendwelche anweisungen fürs speichern der daten).
nach dem anzeigen des dialoges wird dann ein actionPerformed an den listener geschickt und der code somit ausgeführt.
hat jemand eine idee wie man dies eleganter lösen könnte, oder aber eine lösung für mein oben geschildertes problem?
vielen dank im voraus & greetz
m@nu