Swing Problem beim 2. Öffnen eines JFrames

coree

Mitglied
Hallo,
ich habe ein Problem mit meinem Einstellungs-Frame.
Ich starte den JFrame über ein JMenuItem in meiner JMenuBar.
Wenn ich mein Programm gestartet habe und die Options öffne funktioniert noch alles einwandfrei. Wenn ich dann allerdings schließe und neu aufrufe, bekomme ich einen Darstellungsfehler.
Zur Veranschaulichung mal 2 Bilder:
attachment.php

1. Aufruf


attachment.php

2. Aufruf

Auf Bild 1 wird die JList noch richtig dargestellt (hier noch ohne einträge), beim 2. Bild ist die JList plötzlich verschwunden und nur noch das ScrollPane wird dargestellt (erkennbar an der Border).

Aufruf Options durch menuItem
Java:
        menuItem = new JMenuItem("Einstellungen");
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        menuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent evt) {
                new Options();
            }
        });

Options
Java:
public class Options extends JFrame {

    private static JFrame options = new JFrame("Einstellungen");
    
    public static JFrame getOptions() {
        return options;
    }

    public Options() {

        options.setPreferredSize(new Dimension(510, 400));
        options.setResizable(false);
        options.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

        final OptionsFolder folderPanel = new OptionsFolder();
        final OptionsMail mailPanel = new OptionsMail();

        final JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.setPreferredSize(new Dimension(400, 300));
        tabbedPane.addTab("Ordner", folderPanel);
        tabbedPane.addTab("Mail", mailPanel);

        options.getContentPane().add(tabbedPane, BorderLayout.CENTER);
        options.pack();
        options.setVisible(true);

    }
}

closeButton in OptionsFolder
Java:
        final JButton closeButton = new JButton(new ImageIcon(getClass()
                .getResource("images/close.jpg")));
        closeButton.setPreferredSize(new Dimension(100, 31));
        closeButton.setMinimumSize(new Dimension(100, 31));
        closeButton.setMaximumSize(new Dimension(100, 31));
        closeButton.setRolloverEnabled(true);
        closeButton.setRolloverIcon(new ImageIcon(getClass()
                .getResource("images/close_hover.jpg")));
        closeButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
        closeButton.setFocusPainted(false);
        closeButton.setContentAreaFilled(false);
        closeButton.setBorder(null);
        closeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                Options.getOptions().dispatchEvent(new WindowEvent(
                        Options.getOptions(), WindowEvent.WINDOW_CLOSING));
            }
        });

Evtl kann mir jemand dabei weiter helfen. ich hab keine ahnung woran es liegen könnte oder gar was ich zu tun hab.
danke schonmal
 

Anhänge

  • aufruf1.png
    aufruf1.png
    14,4 KB · Aufrufe: 75
  • aufruf2.png
    aufruf2.png
    13,9 KB · Aufrufe: 64
Zuletzt bearbeitet von einem Moderator:

KrokoDiehl

Top Contributor
Ich weiß nciht woran es genau liegt, aber was mir spanisch vorkommt, ist der ActionListener:
Java:
        menuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent evt) {
                new Options();
            }
        });
Hier wird jedes Mal der Konstruktor von Options durchlaufen. Auch wenn das dortige Objekt statisch ist, wird der Frame immer neu belegt.
Erzeuge dein Einstellungsfenster einmalig und zeig es dann nur an, anstatt es immer wieder aufzubauen. Ich benutze in solchen Fällen meist etwas á la:
Java:
public class MainClass
{
    private JFrame options = null;
    ...
    
    public JFrame getOptionsDialog()
    {
        // lazy creation:
        if (options == null)
        {
            options = new Options();
            //sonstige (einmalige) Intialisierugnen
        }

        return options;
    }    

    ...

        menuItem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                final JFrame frame = getOptionsDialog();
                frame.setVisible(true);
            }
        });
}

Damit hast du nur ein Einstellungsfenster und es wird immer da gleiche angezeigt. Vllt hilft das.
 

coree

Mitglied
Erzeuge dein Einstellungsfenster einmalig und zeig es dann nur an, anstatt es immer wieder aufzubauen. Ich benutze in solchen Fällen meist etwas á la:
Java:
public class MainClass
{
    private JFrame options = null;
    ...
    
    public JFrame getOptionsDialog()
    {
        // lazy creation:
        if (options == null)
        {
            options = new Options();
            //sonstige (einmalige) Intialisierugnen
        }

        return options;
    }    

    ...

        menuItem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                final JFrame frame = getOptionsDialog();
                frame.setVisible(true);
            }
        });
}

Damit hast du nur ein Einstellungsfenster und es wird immer da gleiche angezeigt. Vllt hilft das.

Hm... danke schonmal, aber so ganz funktioniert dies noch nicht. wenn ich die Options nun öffne, kommt der Optionsframe wie gewünscht und noch ein 2. leerer Frame. wenn ich nun beide schließe und die options erneut aufrufen möchte, kommt nur noch der 2. leere frame.
 

coree

Mitglied
ne, ich post mal die komplette menuBar, evtl fällt dann irgendwann auf:
Java:
public class MenuBar {
    private JFrame options = null;

    public JFrame getOptionsDialog()
    {
        // lazy creation:
        if (options == null)
        {
            options = new Options();
            //sonstige (einmalige) Intialisierugnen
        }

        return options;
    }

   /**
    * Erstellt eine Menüleiste.
    * @return menuBar
    */
   public final JMenuBar createMenuBar() {
        JMenuBar menuBar;
        JMenuItem menuItem;
        JMenu menu;

        menuBar = new JMenuBar();
        menuBar.setBackground(new Color(239, 239, 239));
        menuBar.setBorder(BorderFactory.createMatteBorder(
                                    0, 0, 1, 0, new Color(34, 34, 34)));

        menu = new JMenu();
        menu.setText("Datei");
        menu.setPreferredSize(new Dimension(45, 20));
        menu.setHorizontalAlignment(SwingConstants.CENTER);
        menu.setHorizontalTextPosition(SwingConstants.CENTER);
        menu.setIconTextGap(0);
        menu.setMnemonic(KeyEvent.VK_D);
        menuBar.add(menu);

        menuItem = new JMenuItem("Einstellungen");
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        menuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent evt) {
                final JFrame frame = getOptionsDialog();
                frame.setVisible(true);
            }
        });
        menu.add(menuItem);

        /*
        menu.addSeparator();
        menuItem = new JMenuItem("Starte Verbindung");
        menuItem.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(final ActionEvent evt) {
            newEdgeActionPerformed(evt);
        }
        });
        menu.add(menuItem);*/

        menu = new JMenu("Hilfe");
        menu.setMnemonic(KeyEvent.VK_H);
        menuBar.add(menu);

        return menuBar;
    }
    /*private void newEdgeActionPerformed(final ActionEvent evt) {
       EdgePeer newEdge = new EdgePeer("");
       newEdge.start();
    }*/
    /**
     * Returns an ImageIcon, or null if the path was invalid.
     * @param path Pfad zum Icon
     * @return ImageIcon
     */
    protected static ImageIcon createImageIcon(final String path) {
        final java.net.URL imgURL = MenuBar.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            ErrorHandling.error("MenuBar", "createImageIcon", 0,
                        "Konnte Datei " + path + "nicht finden.");
            return null;
        }
    }
}

Der Code des Frames selbst sieht so aus:
Java:
public class Options extends JFrame {

    /**
     * Der Frame des Einstellungsfensters.
     * @see Options()
     * @see ButtonListener()
     */
    private static JFrame options = new JFrame("Einstellungen");
    
    /**
     * Get-Methode zur Übergabe des Frames der Optionen.
     * @return options
     */
    public static JFrame getOptions() {
        return options;
    }

    /**
     * Einstellungsfenster. 
     */
    public Options() {

        options.setPreferredSize(new Dimension(510, 400));
        options.setResizable(false);
        options.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

        final OptionsFolder folderPanel = new OptionsFolder();
        final OptionsMail mailPanel = new OptionsMail();

        final JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.setPreferredSize(new Dimension(400, 300));
        tabbedPane.addTab("Ordner", folderPanel);
        tabbedPane.addTab("Mail", mailPanel);

        options.getContentPane().add(tabbedPane, BorderLayout.CENTER);
        options.pack();
        options.setVisible(true);

    }
}
oder könnte der fehler mit der nicht angezeigten liste bei Options liegen, da ich dort auch beim aufruf der options jedes mal new OptionsFolder() quasi neu mache.
 

coree

Mitglied
in OptionsFolder oder OptionsMail werden die zwei Tabs des TabbedPanes erstellt:
Java:
public class OptionsFolder extends JPanel {

    /**
     * Einstellungsfenster.
     */
    public OptionsFolder() {

        super(new GridBagLayout());
        ....
   }

}
 

Michael...

Top Contributor
Könnte an der Art und Weise liegen wie das programmiert ist:
statische Variablen: private static JFrame options = new JFrame("Einstellungen");
--> unschön
Options erbt von JFrame wird aber nie als solcher genutzt. warum?
Warum erzeugst Du nicht einmalig ein Frameobjekt und blendest es bei Bedarf ein und wieder aus?
 

coree

Mitglied
Könnte an der Art und Weise liegen wie das programmiert ist:
statische Variablen: private static JFrame options = new JFrame("Einstellungen");
--> unschön
Options erbt von JFrame wird aber nie als solcher genutzt. warum?
Warum erzeugst Du nicht einmalig ein Frameobjekt und blendest es bei Bedarf ein und wieder aus?

Hab nun deinen Code zum Laufen gebracht und auch, dass sich das Fenster beim erneuten Öffnen richtig verhält.
hab an OptionsFolder und OptionsMail jeweils ne Referenz auf den OptionsFrame gegeben und dann per setVisible(false) einfach ausgeblendet.
danke :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
A Swing Problem beim Neuerstellen einer Node AWT, Swing, JavaFX & SWT 4
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
B Swing Problem beim ActionListener AWT, Swing, JavaFX & SWT 5
K Swing Problem beim Zeichnen von Kreisen AWT, Swing, JavaFX & SWT 4
K JButton Problem beim Schriftfarbe Ändern AWT, Swing, JavaFX & SWT 2
P Problem beim erstellen eines JPanel in einem JFrame AWT, Swing, JavaFX & SWT 7
R Problem beim Anzeigen von Bildern auf JInternalFrame AWT, Swing, JavaFX & SWT 6
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
M Problem beim Eventhandling AWT, Swing, JavaFX & SWT 5
B Problem beim laden von Bild mit getResource() AWT, Swing, JavaFX & SWT 3
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
C Performance-Problem beim Überschreiben von paintComponent() AWT, Swing, JavaFX & SWT 2
M Problem beim Zeichnen mit Path2D AWT, Swing, JavaFX & SWT 4
F Swing JTable: Problem beim zeile löschen AWT, Swing, JavaFX & SWT 3
G Problem beim setzen des Fokus AWT, Swing, JavaFX & SWT 4
Z Problem beim JTextField AWT, Swing, JavaFX & SWT 5
1 Java.awt.Robot Problem beim Shift-Druck AWT, Swing, JavaFX & SWT 5
B Swing Problem beim Elemente zu JList hinzufügen AWT, Swing, JavaFX & SWT 5
F Problem beim Positionieren von Icon und Text in Button AWT, Swing, JavaFX & SWT 2
Developer_X Swing Problem beim "rezeichnen" -> Überzeichnen der Komponente AWT, Swing, JavaFX & SWT 8
N SWT Einfaches Problem beim Layout AWT, Swing, JavaFX & SWT 8
N Swing Problem beim Einlesen von Jtable in Array AWT, Swing, JavaFX & SWT 5
W Swing Problem beim Passwort Dialog AWT, Swing, JavaFX & SWT 4
C Problem mit Swing Application Framework - Projekt beim AWT, Swing, JavaFX & SWT 2
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
A Problem beim Setzen von JPanels AWT, Swing, JavaFX & SWT 4
P Problem beim Linien ziehen! AWT, Swing, JavaFX & SWT 12
S Problem beim Anpassen vom GridBagLayout AWT, Swing, JavaFX & SWT 10
H Adressbuch - Problem beim Speichern der Eingabe AWT, Swing, JavaFX & SWT 5
A Problem mit der Seiteneinrichtung beim Drucken AWT, Swing, JavaFX & SWT 7
P Bug in Java? - Problem beim Ändern von Spaltentiteln AWT, Swing, JavaFX & SWT 2
I Layout Problem beim Skalieren AWT, Swing, JavaFX & SWT 3
S Problem beim implementerien von ActionListener AWT, Swing, JavaFX & SWT 4
Y Problem beim Drucken AWT, Swing, JavaFX & SWT 2
A Problem beim Import! AWT, Swing, JavaFX & SWT 2
M Problem beim Einsatz von ScrollPane (Fenster spielt verrückt AWT, Swing, JavaFX & SWT 2
H Problem beim zeichen eines TimeSeriesChart mit jfreechart AWT, Swing, JavaFX & SWT 5
Z Und schon wieder die Linien (Problem beim überzeichnen) AWT, Swing, JavaFX & SWT 4
W Problem beim neuzeichnen eines Rechteckes (SWT) AWT, Swing, JavaFX & SWT 2
J Problem beim Multi-Threading mit einem JDialog AWT, Swing, JavaFX & SWT 2
J Problem mit Alpha-Wert beim Button AWT, Swing, JavaFX & SWT 3
P Problem beim Zeichnen auf ein BufferedImage AWT, Swing, JavaFX & SWT 4
F Problem mit geänderten AttributSet beim StyledDocument AWT, Swing, JavaFX & SWT 4
B BorderLayout/JSplitPane Problem beim Ausrichten AWT, Swing, JavaFX & SWT 5
C Problem beim Ausführen von Thread per Button AWT, Swing, JavaFX & SWT 2
S Problem beim Image laden AWT, Swing, JavaFX & SWT 4
D Problem beim Erstellen eines GridBagLayouts AWT, Swing, JavaFX & SWT 3
A Problem beim Neuzeichnen AWT, Swing, JavaFX & SWT 2
V Problem beim drucken AWT, Swing, JavaFX & SWT 4
D Problem beim Update von unsichtbaren JComponents mit Timern AWT, Swing, JavaFX & SWT 5
S Problem beim Umbenennen von MP3s AWT, Swing, JavaFX & SWT 10
O Problem beim Umwandeln eines Applets in eine Applikation AWT, Swing, JavaFX & SWT 15
T Problem beim Laden von Bildern AWT, Swing, JavaFX & SWT 14
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben