Swing Menubar Close, Minimize, Maximize button

CHAOSFISCH

Bekanntes Mitglied
Servus,

kann mir jemand sagen wie ich direkt neben diesen "Buttons" einen 4. für minimize to Tray einfügen kann?

2.
Wenn man auf X klickt führt das Programm die DefaultCloseOperation ja aus, ich will den User fragen, ob er die Anwendung wirklich beenden will.

Mein Ansatz:
Ändern der defaultCloseOperation auf Do nothing...
Hinzufügen eines WindowListeners. In der Methode windowClosing wird dann ein JOptionPane angezeigt.

Tatsächliches Verhalten:
Beim drücken des X verschwindet das Programm aus der Taskleiste, es läuft jedoch noch weiter. Ein JOptionPane wird nicht angezeigt.
 
Zur ersten Frage: Mittels JWindow könntest du dein eigenes Fenster designen, also auch welche Buttons da oben rechts erscheinen sollen. Wäre mein Ansatz.
 
Glaub ich jetzt ersteinmal ohne Codebeispiel nicht. Wenn die Default Operation auf DO_NOTHING_ON_CLOSE gesetzt ist, schließt sich das Fenster auch nicht.
Java:
        app.getMainFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        app.getMainFrame().addWindowListener(new WindowAdapter() {});

Nur kurz als Beispiel.
Fenster verschwindet, Prozess läuft noch.
 
Mit Codebeispiel meinte ich ein komplettes Bsp.
Wenn ich die beiden Zeilen an einem Frame anwende verschwindet bei mir (und mit ziemlicher Sicherheit bei allen anderen) gar nichts:
Java:
JFrame frame = new JFrame();
frame.setBounds(0, 0, 300, 300);
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {});
frame.setVisible(true);
 
zu deiner 2. Frage, so könnte man das bpw. realisieren:

Java:
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;

public class MyJFrame extends JFrame {
	public static void main(String[] args) {
		new MyJFrame();
	}

	MyJFrame mjf = this;

	public MyJFrame() {
		setSize(300, 300);
		setLocationRelativeTo(null);
		closeWindowAndApplicationQuestion();
		setVisible(true);
	}

	private void closeWindowAndApplicationQuestion() {

		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				Object[] options = { "Ja", "Nein" };
				int selected = JOptionPane.showOptionDialog(mjf,
						"Wollen Sie die gesamte Anwendung schliessen ?",
						"Anwendung beenden", JOptionPane.DEFAULT_OPTION,
						JOptionPane.INFORMATION_MESSAGE, null, options,
						options[0]);
				if (selected == 0) {
					// DB closen, Props wegschreiben...und was auch sonst noch
					// gemacht werden muss.
					System.exit(0);
				} else {
					mjf.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

					return;

				}

			}
		});
	}

}
 

Zurück
Oben