Archive for the Elektronische Datenverarbeitung Category

Datei überschreiben durch JFileChooser nur über Bestätigung

Posted in Programmierung on 3. Dezember 2010 by redxorange

Möchte man in einer Java-Applikation eine Datei speichern, so bietet sich dafür der JFileChooser an. Für den Anwender kann es jedoch ein wenig ärgerlich werden, wenn er eine falsche Datei zum Überschreiben ausgewählt hat oder einen Dateinamen eingegeben hat, der in dem Ordner bereits existiert, denn: Die Datei wird direkt überschrieben.

Also möchte man einen Dialog anzeigen lassen, der um die Bestätigung des Anwenders bittet. Dafür bietet sich JOptionPane.showConfirmDialog() gut an.

JFileChooser fileChooser = new JFileChooser();
if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
	if (JOptionPane.showConfirmDialog(this, fileChooser.getSelectedFile().getName() + " ist bereits vorhanden." +
		System.getProperty("line.separator") + "Möchten Sie sie ersetzen?", "Speichern bestätigen",
		JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION)
		//speichern

[paste]

Und wenn der Anwender sich nun umentscheidet und „Nein“ wählt? Der JFileChooser muss nun neu geöffnet werden, weil er sich durch das Klicken auf „Speichern“ schließt.
Das erste Problem ließe sich durch eine Schleife lösen. Dies behebt jedoch nicht das zweite Problem: Klickt man auf „Speichern“, so schließt sich der JFileChooser und dann öffnet sich der Dialog. Erst beim Klick auf „Nein“ öffnet sich der JFileChooser wieder. Nicht gerade ein natürliches Verhalten (und unschön ist es allemal).

Für dieses Dilemma gibt es jedoch eine einfache Lösung. JFileChooser’s approveSelection() muss überschrieben werden. Dies lässt sich schnell in einer anonymen Klasse erledigen.

JFileChooser fileChooser = new JFileChooser() {
	@Override
	public void approveSelection() {
		File file = getSelectedFile();
		if (file.exists()) {
			if (JOptionPane.showConfirmDialog(this, file.getName() + " ist bereits vorhanden." +
					System.getProperty("line.separator") + "Möchten Sie sie ersetzen?", "Speichern bestätigen",
					JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION)
				super.approveSelection();
		} else super.approveSelection();
	}
};
if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
	//speichern

[paste]

Wird nun auf „Speichern“ geklickt, so schließt sich der JFileChooser nicht, sondern es wird nur der Dialog geöffnet. Beim Klick auf „Nein“ schließt sich dieser einfach wieder, der JFileChooser bleibt jedoch sichtbar. Wird jedoch auf „Ja“ geklickt, so wird die ursprüngliche Methode von approveSelection() aufgerufen (JFileChooser wird unsichtbar gemacht und das ActionEvent JFileChooser.APPROVE_SELECTION wird gefeuert).

Das gewünschte Verhalten ist erreicht – ein weiterer Tag gerettet! 🙂

Keine Macht der Werbung!

Posted in Elektronische Datenverarbeitung on 19. September 2010 by redxorange

Wen stören sie nicht, die blinkenden Werbebanner, Pop-ups oder gar die Werbefenster, die sich penetrant über den Inhalt der besuchten Webseite legen und sich nur über eine ab und an gut versteckte Schließen-Schaltfläche wegdrücken lassen? Was, dich stören sie nicht? Dann bitte einmal kurz Strg + W drücken. Danke.

Ich werde hier kurz Lösungen für die mir geläufigsten Browser (Firefox, Internet Explorer, Opera) vorstellen. Ist dein Browser nicht dabei? Dann verfass die Lösung doch bitte als Kommentar. Ich nehme sie dann gegebenenfalls auf.

» Firefox

Einfach das Add-on AdBlock Plus herunterladen, das Filterabonnement EasyList Germany+EasyList (Deutsch) hinzufügen, fertig.

» Internet Explorer

Hier hilft Simple Adblock. Einfach installieren, fertig.

» Opera

In Opera wird der Blockierfilter über die Datei urlfilter.ini (Infos auf Opera-Wiki und OperaInfo-Wiki) geregelt. Dort kann man sich die Liste an zu blockierenden URLs entweder selbst eintragen, vorgefertigte Listen herunterladen und integrieren oder sich beispielsweise die Java-Anwendung Opera URLFilter Downloader herunterladen. Unterstützung mehrerer Sprachen fehlt zwar (noch), aber die GUI ist simpel gehalten und auch selbsterklärend.

Alles klar? 😉