B
BigBaer
Gast
Hallo zusammen,
habe folgende beiden Klassen geschrieben und will nun über "Hilfe" im "Datei"-Menü mit dem ActionListener einen JDialog aufrufen, der einen Hilfetext im HTML-Format aus der Datei "Hilfe.htm" anzeigt. Dies funktioniert, außer, dass nach dem Start der Anwendung oft beim ersten, manchmal auch beim zweiten Aufruf von "Hilfe" das öffnende JDialog-Fenster minimal groß ist und beim zweiten bzw. dritten und den folgenden Malen die korrekte Größe besitzt, so dass der Inhalt auch in seiner Gesamtheit lesbar ist. Habe ich da was falsch gemacht? Wie kann man dieses Problem am besten beheben?
1.
2.
habe folgende beiden Klassen geschrieben und will nun über "Hilfe" im "Datei"-Menü mit dem ActionListener einen JDialog aufrufen, der einen Hilfetext im HTML-Format aus der Datei "Hilfe.htm" anzeigt. Dies funktioniert, außer, dass nach dem Start der Anwendung oft beim ersten, manchmal auch beim zweiten Aufruf von "Hilfe" das öffnende JDialog-Fenster minimal groß ist und beim zweiten bzw. dritten und den folgenden Malen die korrekte Größe besitzt, so dass der Inhalt auch in seiner Gesamtheit lesbar ist. Habe ich da was falsch gemacht? Wie kann man dieses Problem am besten beheben?
1.
Code:
package battleship;
import java.awt.BorderLayout;
import javax.swing.*;
public class BattleShip {
/**
* @param args
*/
public static void main(String[] args) {
// Action Listener for menu
MyActionListener myActionListener = new MyActionListener();
// menu items
JMenuItem menuItemHilfe = new JMenuItem("Hilfe");
menuItemHilfe.setActionCommand("help");
menuItemHilfe.addActionListener(myActionListener);
JMenuItem menuItemBeenden = new JMenuItem("Beenden");
menuItemBeenden.setActionCommand("exit");
menuItemBeenden.addActionListener(myActionListener);
// main menu "Datei"
JMenu fileMenu = new JMenu("Datei");
fileMenu.add(menuItemHilfe);
fileMenu.addSeparator();
fileMenu.add(menuItemBeenden);
// Menu-Bar
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
// main window
JFrame frame = new JFrame("BattleShip V1.0");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setLayout(new BorderLayout());
frame.add(menuBar,BorderLayout.NORTH);
frame.setVisible(true);
}
}
2.
Code:
package battleship;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;;
public class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("exit")) {
System.out.println("Es wurde \"Beenden\" über das Datei-Menu aufgerufen.");
System.exit(0);
}
if (ae.getActionCommand().equals("help")) {
System.out.println("Die \"Hilfe\" aus dem Datei-Menu wurde aufgerufen.");
JEditorPane helpText = new JEditorPane();
helpText.setEditable(false);
try {
helpText.setPage(new File("hilfe.htm").toURI().toURL());
} catch (IOException e) {
System.out.println(e.getMessage());
}
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(helpText);
JButton closeButton = new JButton("Hilfe schließen");
closeButton.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent ae) {
getTopLevelWindow(ae.getSource()).dispose();
}
});
JDialog helpDialog = new JDialog((JFrame)getTopLevelWindow(ae.getSource()),"Hilfe",true);
helpDialog.setResizable(false);
helpDialog.setLayout(new BorderLayout());
helpDialog.add(scrollPane);
helpDialog.add(closeButton,BorderLayout.SOUTH);
helpDialog.pack();
helpDialog.setVisible(true);
}
}
private Window getTopLevelWindow(Object o) {
return (Window)(((JComponent)o).getTopLevelAncestor());
}
}