Wie lässt sich ein Hilfedialog realisieren?
Im Beispiel wird ein leerer JFrame
mit
einer MenuBar erzeugt. Sie enthält lediglich den
Punkt "Hilfe" zum Aufruf des Hilfedialogs und
wird durch die Methode createMenuBar()
(Zeile 30) zurückgegeben. Das JMenuItem
"Hilfe" wird bei einem ActionListener
angemeldet, der die Erzeugung einer Instanz des
Hilfedialogs anstößt (Zeile 32).
import java.awt.BorderLayout; import java.awt.Toolkit; import java.io.IOException; import java.net.URL; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.SwingUtilities; public class HilfeDialogBsp { public HilfeDialogBsp() { init(); } private void init() { JFrame frame = new JFrame(); frame.setJMenuBar(createMenuBar(frame)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("Hilfedialog-Beispiel"); frame.setSize(400, 400); frame.setLocationRelativeTo(null); frame.setVisible(true); } private JMenuBar createMenuBar(JFrame frame) { JMenuItem item = new JMenuItem("Hilfe"); item.addActionListener(e -> new HilfeDialog(frame)); JMenuBar mBar = new JMenuBar(); mBar.add(item); return mBar; } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new HilfeDialogBsp()); } } class HilfeDialog { private JTextPane textPane; private JScrollPane scrollPane; public HilfeDialog(JFrame frame) { textPane = new JTextPane(); textPane.setEditable(false); textPane.setContentType("application/xhtml+xml"); try { URL url = this.getClass().getClassLoader().getResource("test/hilfe.html"); if (url != null) textPane.setPage(url); } catch (IOException | RuntimeException e) { e.printStackTrace(); } scrollPane = new JScrollPane(textPane); JDialog dialog = new JDialog(frame); dialog.add(scrollPane, BorderLayout.CENTER); dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); dialog.setSize(Toolkit.getDefaultToolkit().getScreenSize()); dialog.setVisible(true); } }
Der Konstruktor der Klasse HilfeDialog
bekommt den Hauptframe als Argument übergeben.
Diese Referenz wird an den Konstruktor des JDialog
weitergereicht (Zeile 63). Hierdurch wird bei
Anwendungen mit mehreren Fenstern festgelegt, zu welchem
der Dialog gehört. Die Angabe beim Aufruf des JDialog
-Konstruktors
ist optional.
Zentral auf den Dialog wird eine JTextPane
gesetzt, die nicht editiert werden kann und als
Inhaltstyp den MIME-Type application/xhtml+xml
definiert (Zeile 52). Auf diese Weise kann eine
weitgehend frei vorformatierte HTML-Datei gezeigt
werden.
Sie wird innerhalb eines try-catch-Blockes
durch den ClassLoader
als URL
geladen und bei Erfolg mit einer JScrollPane
auf die JTextPane
gesetzt (Zeile 57).
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.