Swing Hilfe-Fenster erstellen

G

Guest145623428

Gast
Hallo Leute,

Ich muss für ein Projekt ein Hilfe Fenster erstellen. Was Grösse usw. angeht ist hier mal egal. Ich bräuchte nur eine gute Idee wie ich das realisieren könnte.
Ich habe einen JButton mit der Aufschrift "Help", somit ist fast alles erlaubt. Wäre froh, wenn mir hier heute jemand eine gute Idee liefern könnte.

Danke schon mal im Voraus.
 

Ebenius

Top Contributor
Die Anforderungen sind arg ungenau. Die einfachste Hilfe ist eine Sammlung von HTML-Dateien, die per Knopfdruck im Browser geöffnet werden. Ansonsten gibt es von Sun JavaHelp und noch ein Dutzend andere Hilfesysteme. Der Aufwand ist in jedem Fall nicht gering. Wenn ein paar Seiten Manual als HTML und/oder PDF den Job ebenfalls erledigen würde ich in jedem Fall von Hilfesystemen abraten.

Ebenius
 
G

Guest145623428

Gast
Nun ja es geht lediglich darum, dass z.B. die Start-Parameter zu einem Programm aufgezeigt werden können:
z.B. bei Ping
-c [Zahl] Anzahl zu sendende Pakete
usw.

Damit der Benutzer eine kleine Auswahl der wichtigsten Parameter hat ohne gross suchen zu müssen.
 

Ebenius

Top Contributor
Dann wäre doch Standard, dass [c]program -h[/c] und [c]program --help[/c] die Hilfe auf der Konsole ausgibt, oder?

Woran hapert's denn?

Ebenius
 
G

Guest145623428

Gast
Stimmt. Also die Sache mit dem JDialog hab ich vorher überlesen, Entschuldigung. Was mir hier Kopfzerbrechen bereitet ist, dass ich nicht weiss, wie ich eine ähnliche Formatierung in einem JDialog hinkriege. Da muss ich wohl mal gefehlt haben ;)

Hat dies von euch schon jemand mal so ähnlich gemacht?
Wie sieht es mit automatischem "word wrap" aus, geht das bei Java von Hause aus?

Danke für die bisherigen Antworten.
 
G

Guest145623428

Gast
So ich habs doch noch selbst irgendwie hinbekommen, trotzdem danke an alle für die Inputs (Brainstorming) :D

Java:
JDialog helpDialog = new JDialog();

JTextPane helpText = new JTextPane();
		helpText.setBackground(helpDialog.getBackground());
		helpText.setText(
			"Parameter" + "\t" + "Beschreibung" + "\n" +
			"-a" + "\t" + "macht a" + "\n" +
			"-b" + "\t" + "macht b" + "\n" +
			"-c" + "\t" + "macht c"
		);
		helpText.setEditable(false);

		helpDialog.add(helpText);

Kann mir evtl. einer von euch noch verraten, wie ich einfach verhindere, dass der Dialog mehrfach geöffnet werden kann?
 
G

Guest145623428

Gast
Java:
		helpDialog.setModal(true);

Da muss ich dich leider enttäuschen. Damit kann ich über den JButton immer noch unendlich viele Help-Dialoge öffnen.
Genau das gleiche Phänomen mit
Java:
helpDialog.setModalityType(ModalityType.[ModeType]);
, egal welchen ModeType ich wähle.
 

diggaa1984

Top Contributor
? die idee is eigentlich das du nix machen kannst solange das fenster offen ist ???:L
hast uns vielleicht noch Code verheimlicht? :D
 
Zuletzt bearbeitet:
G

Guest145623428

Gast
Also exklusiv ;) und nur für euch mein komplettes Code-Fragment zu meinem Hilfe-Dialog:

Java:
private void jButton_123peopleHelpActionPerformed(java.awt.event.ActionEvent evt) {                                                      

		JDialog helpDialog = new JDialog();

		if (!helpDialog.isShowing() == true) {

			helpDialog.setTitle("nslookup");
			helpDialog.setVisible(true);

			// get screen size
			Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
			Dimension min = new Dimension((int) (d.width / 5), 200);

			// set help dialog size min
			helpDialog.setMinimumSize(min);

			// set position on screen
			helpDialog.setBounds(d.width - helpDialog.getWidth(), 0, helpDialog.getWidth(), helpDialog.getHeight());
			helpDialog.setVisible(true);

			helpDialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

			// set text for help
			JTextPane helpText = new JTextPane();
			helpText.setBackground(helpDialog.getBackground());
			helpText.setText(
					"Parameter" + "\t" + "Beschreibung" + "\n"
					+ "-a" + "\t" + "macht a" + "\n"
					+ "\t" + "jetz bauen wir doch mal noch" + "\n"
					+ "\t" + "eine überlange zeile ein und" + "\n"
					+ "\t" + "sehen uns an was dann passiert" + "\n"
					+ "-b" + "\t" + "macht b" + "\n"
					+ "-c" + "\t" + "macht c");
			helpText.setEditable(false);


			helpDialog.add(helpText);

		}

...und das sollte halt nur 1x geöffnet werden können, sonst nervt sich der User wieder über den bösen, unfähigen Programmierer, der sowas der Anwendung nicht verboten hat.
 

eRaaaa

Top Contributor
du rufst 2 x setvisible auf --> lösche das mal und setze das lieber ganz ans ende..sollte eh besser der letzte aufruf sein
und dann vorher natürlich noch modal setzen :D
 
G

Guest145623428

Gast
und siehe da es klappt!
Vielen Dank grosser Meister :D

Nur... jetzt ist ALLES gesperrt, bis das Hilfe-Fenster geschlossen wird. Sprich: will ich die Optionen sichtbar haben, weil ich sie nicht auswendig kenne, muss ich vor der Eingabe jeder einzelnen Option das Hilfe-Fenster schliessen. :S
 

eRaaaa

Top Contributor
okay, dann ist modal vllt doch keine richtige wahl für dich. dann erstell den dialog halt NICHT im listener, sondern innerhalb des konstruktors der klasse o.ä. und rufe im listener einfach nur noch setvisible(true) auf ?!
 
G

Guest145623428

Gast
Guten Morgen Leute,

Ich hab jetzt nochmals über diesem Problem gebrütet und bin zu der folgenden Lösung gekommen:
Java:
if (!helpDialogOpened) {

			JDialog helpDialog = new JDialog();

			helpDialog.setTitle("Help for nslookup");

			// get screen size
			Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
			Dimension min = new Dimension((int) (d.width / 5), 200);
			Dimension max = new Dimension((int) (d.width / 5), (int) (d.height));

			// set help dialog size min / max
			helpDialog.setMinimumSize(min);
			helpDialog.setMaximumSize(max);

			// set position on screen
			helpDialog.setBounds(d.width - helpDialog.getWidth(), 0, helpDialog.getWidth(), helpDialog.getHeight());

			helpDialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

			// set text for help
			JTextPane helpText = new JTextPane();
			helpText.setBackground(helpDialog.getBackground());
			helpText.setText("Hilfetext für nslookup");
			helpText.setEditable(false);

			helpDialog.add(helpText);

			// show help dialog
			if(helpDialogOpened == false) {
				helpDialog.setVisible(true);
				helpDialogOpened = true;
			}

			// close help dialog on window event
			helpDialog.addWindowListener(new WindowListener() {

				public void windowOpened(WindowEvent e) {
					// nothing implemented
				}

				public void windowClosing(WindowEvent e) {
					helpDialogOpened = false;
				}

				public void windowClosed(WindowEvent e) {
					// nothing implemented
				}

				public void windowIconified(WindowEvent e) {
					// nothing implemented
				}

				public void windowDeiconified(WindowEvent e) {
					// nothing implemented
				}

				public void windowActivated(WindowEvent e) {
					// nothing implemented
				}

				public void windowDeactivated(WindowEvent e) {
					// nothing implemented
				}
			});
		}

Über einen stinkeinfachen boolean helpDialogOpened prüfe ich, ob schon ein HelpDialog geöffnet ist. Das schöne an dieser Lösung ist, dass ich weiterhin in meinen Textfeldern der Hauptapplikation Befehle einfügen kann. Der HelpDialog bleibt geöffnet.

Unschön ist jedoch, dass das ganze nur klappt, solange ich keine eigene Klasse dafür baue. Bau ich eine eigene Klasse und übergebe den Titel des Fensters und den Fensterinhalt an die Klasse HelpDialog, lässt sich mein Fenster wieder mehrfach öffnen. Hier hab ich leider keine Lösung gefunden. (Für meine theoretisch ca. 40 HelpDialoge ist Wiederverwendbarkeit und Übersichtlichkeit gefragt).

Ich hab die Klasse und den Konstruktor mal erstellt. Vermutlich sehe ich im Moment vor lauter Bäumen den Wald nicht mehr. Hier noch meine (mehrfach öffnende) Klasse:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pentestsuite;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JTextPane;

/**
 *
 * @author svenfreihofer
 */
public class HelpDialog {


	boolean helpDialogOpened;
	JDialog helpDialog = new JDialog();

	// get screen size
	Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	Dimension min = new Dimension((int) (d.width / 5), 200);
	Dimension max = new Dimension((int) (d.width / 5), (int) (d.height));
	
	

	public HelpDialog(String title, String startparameter) {
		if(helpDialogOpened == false) {
			
			// set title
			helpDialog.setTitle(title);

			// set help dialog size min / max
			helpDialog.setMinimumSize(min);
			helpDialog.setMaximumSize(max);
			
			// set position on screen (upper right corner of the screen)
			helpDialog.setBounds(
				d.width - helpDialog.getWidth(),	// x-Coord
				0,						// y-Coord
				helpDialog.getWidth(),			// helpDialog width
				helpDialog.getHeight()			// helpDialog height
			);
			
			// closing behaviour
			helpDialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

			// help text
			JTextPane helpText = new JTextPane();

			// set text for help
			helpText.setBackground(helpDialog.getBackground());
			helpText.setText(startparameter);
			helpText.setEditable(false);

			// add JTextPane to JDialog
			helpDialog.add(helpText);

			// show helpDialog
			showHelpDialog();
			helpDialogOpened = true;

			// close helpDialog
			closeHelpDialog();

		}
	} // end constructor HelpDialog

	public void showHelpDialog() {
		if(!helpDialogOpened) {
			helpDialog.setVisible(true);
		}
		helpDialogOpened = true;
	} // end method showHelpDialog

	public void closeHelpDialog() {
		// close help dialog on window event
		helpDialog.addWindowListener(new WindowListener() {

			public void windowOpened(WindowEvent e) {
				// nothing implemented
			}

			public void windowClosing(WindowEvent e) {
				helpDialogOpened = false;
			}

			public void windowClosed(WindowEvent e) {
				// nothing implemented
			}

			public void windowIconified(WindowEvent e) {
				// nothing implemented
			}

			public void windowDeiconified(WindowEvent e) {
				// nothing implemented
			}

			public void windowActivated(WindowEvent e) {
				// nothing implemented
			}

			public void windowDeactivated(WindowEvent e) {
				// nothing implemented
			}
		});
	} // end  method closeHelpDialog
} // end class HelpDialog
 

Arbon

Bekanntes Mitglied
wie wärs wenn du diesen boolean, welcher überprüft ob das fenster schon offen ist einfach static machst? Dann gilt er für alle erstellten Dialoge und nicht nur für die jeweilige instanz.
 

jason

Mitglied
Als kleiner Tipp, wenn du schreibfaul bist:
Benutze statt
Code:
WindowListener
Code:
WindowAdapter
und überschreibe nur die Methoden die du brauchst.

MfG jason
 
G

Guest145623428

Gast
Vielen Dank euch, Jason und Arbon.

@Arbon:
Der Tip mit dem statischen boolean war genau der kleine entscheidende Hinweis, damit ich nur noch ein Hilfe-Fenster öffnen kann. ;)
Danke

@jason:
Wusste ich nicht, aber der Hinweis, macht den Code auch wieder ein Stück übersichtlicher. Vielen Dank

Das Thema ist somit erledigt, ich habe es entsprechend markiert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Erstellen eines Hilfe-Fenster bzw"Erste-Schritte" AWT, Swing, JavaFX & SWT 2
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
JavaBeginner22 Button Hilfe AWT, Swing, JavaFX & SWT 0
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
senol JOptionPane hilfe!!! :(((( AWT, Swing, JavaFX & SWT 32
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
F BorderLayout Hilfe bei Anzeige AWT, Swing, JavaFX & SWT 2
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
T Swing Hilfe - Selbst Informatik Lehrer konnte mir nicht weiter Helfen AWT, Swing, JavaFX & SWT 2
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
A Swing TicTacToe-Bitte um Hilfe AWT, Swing, JavaFX & SWT 32
T Bitte um Hilfe AWT, Swing, JavaFX & SWT 2
T Hilfe bei Code AWT, Swing, JavaFX & SWT 2
S Hilfe bei Java Gui Anfänger AWT, Swing, JavaFX & SWT 5
J Warum geht das nicht? if-else usw..... compilieren geht nicht -- HILFE!!! AWT, Swing, JavaFX & SWT 10
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
T Hilfe was mus ich tun um das fertige JfxFenster zu sehen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
A hilfe für flowlayout AWT, Swing, JavaFX & SWT 6
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
T Swing JTable Zeile mit ausgelesenen Werten mit Hilfe von einem Button hinzufügen AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
H Swing Hilfe bei GUI AWT, Swing, JavaFX & SWT 4
T HILFE wie lösche ich gezeichnetes per tastendruck AWT, Swing, JavaFX & SWT 1
R Swing JOptionPane Fehlermeldung- bitte um Hilfe! AWT, Swing, JavaFX & SWT 4
Tausendsassa ImageIcon?! Hilfe! AWT, Swing, JavaFX & SWT 10
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
M Hilfe bei Performanceverbesserung AWT, Swing, JavaFX & SWT 34
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
M SwingWorker Hilfe! AWT, Swing, JavaFX & SWT 10
K Swing Brauche Hilfe AWT, Swing, JavaFX & SWT 6
O AWT Performance und Bug behebung[brauche Hilfe] AWT, Swing, JavaFX & SWT 2
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
I ausgewählte Zeile mit Hilfe der Tastatur löschen! AWT, Swing, JavaFX & SWT 3
Kenan89 Java FX GUI Hilfe für erste Java FX App AWT, Swing, JavaFX & SWT 8
B Rechteck Mit Hilfe Von Timeline, KeyFrames animieren AWT, Swing, JavaFX & SWT 3
J LayoutManager Hilfe bei Wahl des Layouts AWT, Swing, JavaFX & SWT 9
F Hilfe beim ausschalten von Robot AWT, Swing, JavaFX & SWT 7
N Hilfe bei Memory-Spiel AWT, Swing, JavaFX & SWT 18
L Swing Hilfe bei JTabelModel gesucht AWT, Swing, JavaFX & SWT 4
B Hilfe zu JTable und JTabbedPane AWT, Swing, JavaFX & SWT 18
K Hilfe bei Labels AWT, Swing, JavaFX & SWT 3
S Hilfe beim Lernprozess von java3d AWT, Swing, JavaFX & SWT 20
T JLayeredPanel - Hilfe AWT, Swing, JavaFX & SWT 7
C Swing Hilfe bei umsetzung eines Stundenplans. AWT, Swing, JavaFX & SWT 7
K Swing Hilfe beim JTree! AWT, Swing, JavaFX & SWT 3
N Hilfe bei Panels! AWT, Swing, JavaFX & SWT 11
F Swing Syntaxhighlighting Hilfe AWT, Swing, JavaFX & SWT 5
Jats Bitte um Hilfe bei JComboBox mit Array AWT, Swing, JavaFX & SWT 6
Jats Hilfe bei FocusListener für Taschenrechner AWT, Swing, JavaFX & SWT 4
N Swing nach Fensterrand Action ausführen? HILFE AWT, Swing, JavaFX & SWT 7
R Hilfe bei Bachelorrabeit. Seitenvorschau AWT, Swing, JavaFX & SWT 7
L Mein Kopf dreht sich... Brauche Hilfe beim GUI gestalten AWT, Swing, JavaFX & SWT 10
E LayoutManager Hilfe ein GridbagLayout!! AWT, Swing, JavaFX & SWT 7
K GUI-Hilfe für Anfänger AWT, Swing, JavaFX & SWT 15
J Schulprojekt und braucht hilfe AWT, Swing, JavaFX & SWT 54
G Hilfe! Command Pattern an easy ImageViewer? AWT, Swing, JavaFX & SWT 13
radiac Hilfe bei GUI AWT, Swing, JavaFX & SWT 22
N Hilfe bei erstellen eines Bibliotheksprogrammes AWT, Swing, JavaFX & SWT 15
H Swing Jtable wird nicht angezeigt..hilfe!! AWT, Swing, JavaFX & SWT 16
M DRINGEND HILFE TextPane RECHTSBÜNDIG AWT, Swing, JavaFX & SWT 2
B Swing Hilfe zu JTextField AWT, Swing, JavaFX & SWT 2
J Brauche ganz dringend Hilfe!!! AWT, Swing, JavaFX & SWT 5
V Bitte um Hilfe bei nem Taschenrechner AWT, Swing, JavaFX & SWT 8
F NullPointerException - HILFE!! AWT, Swing, JavaFX & SWT 20
G Hilfe!!!Sudoku AWT, Swing, JavaFX & SWT 19
M Swing JButton hilfe AWT, Swing, JavaFX & SWT 3
M brauche Hilfe um Einträge aus Jlist zu löschen AWT, Swing, JavaFX & SWT 4
Spin Hilfe - Erklärungsbedarf für Kreis AWT, Swing, JavaFX & SWT 5
O Bitte um Hilfe bei ComboBox in TableHeader AWT, Swing, JavaFX & SWT 9
G Hilfe beim Erstellen eines eigenen Html-Editors! AWT, Swing, JavaFX & SWT 4
G Hilfe Meine JPanels verschwinden im Müll AWT, Swing, JavaFX & SWT 10
G Hilfe AWT, Swing, JavaFX & SWT 8
N ausrichtung Button - hilfe bitte AWT, Swing, JavaFX & SWT 2
T Hilfe zu Events? AWT, Swing, JavaFX & SWT 6
A Ini Datei Auswerten - HILFE! AWT, Swing, JavaFX & SWT 6
D Hilfe bei GUI-Elementen in Java AWT, Swing, JavaFX & SWT 9
D Grafikeinsteiger sucht/braucht Hilfe. Wäre Nett ! AWT, Swing, JavaFX & SWT 3
K Mein Informatikprojekt läuft aus dem Ruder Hilfe. F1 ^^ AWT, Swing, JavaFX & SWT 5
S Hilfe! Bekomme Daten nicht ausgelesen AWT, Swing, JavaFX & SWT 3
M hilfe! probleme mit meinem programm AWT, Swing, JavaFX & SWT 5
V Hilfe :( bekomme textarea nicht versetzt AWT, Swing, JavaFX & SWT 2
M Hilfe ich komme nicht an ein JTextArea AWT, Swing, JavaFX & SWT 4
J Hilfe CardLayout AWT, Swing, JavaFX & SWT 3
C Hilfe bei JInternalFrame AWT, Swing, JavaFX & SWT 6
G BubbleSort mit Hilfe einer Balkengrafik visualisieren AWT, Swing, JavaFX & SWT 9
G Leider trotz allem kein Icon :( Brauche Hilfe AWT, Swing, JavaFX & SWT 3
S sinuskurve hilfe! AWT, Swing, JavaFX & SWT 2
D JSplittPane - unsichtbarer Rahmen? hilfe ;) AWT, Swing, JavaFX & SWT 2
G Selbstprogrammierter Editor - brauche Hilfe AWT, Swing, JavaFX & SWT 5
J Hilfe bei EventListening AWT, Swing, JavaFX & SWT 3
M Hilfe bei vers. Fonts und Zeilenlänge in eigenem Editor. AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben