Einzelnen Beitrag anzeigen
Alt 21.11.2003, 07:34   #1 (permalink)
Gast
Nicht angemeldet
 
Fachbeiträge: n/a
Standard Resizing Probleme bei JInternalFrames

Hallo Leute,

ich entwickle eine MDI Anwedung mittels JDesktopPane und JInternalFrame. Immer wenn ich das WindowsLookAndFeel verwende habe ich folgende Probleme:

(1) Ich öffne 2 Fenster A und B, die sofort maximiert werden. Schliesse ich nun z.b. Fenster B mit einem selbst definierten Button, verliert Fenster A den Focus und ändert seine Grösse (perferredSize). Klicke ich nun auf Fenster A erhält es den Focus und maximiert sich automatisch wieder.

(2) Ich öffne 2 Fenster A und B, die sofort maximiert werden. Verkeinere ich nun z.B. Fenster B (auf Icongrösse), hat das wieder eine Grössenänderung von Fenster A zur Folge.

Bei Verwendung von MetalLookAndFeel oder MotifLookAndFeel gibt es keine Probleme.

Das folgende Programm demonstriert dieses Verhalten:

MainWindow - Klasse:

Code:
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.beans.PropertyVetoException;

public class MainWindow extends JFrame
{
    private JDesktopPane desktop;

    public MainWindow()
    {
        // Set the look and feel
        try
        {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception ex)
        {
            ex.printStackTrace();
        }

        // Create and add JDesktopPane
        desktop = new JDesktopPane();
        getContentPane().add(desktop);

        // Create and add main menu
        JMenuBar  menubar = new JMenuBar();
        JMenu menu = new JMenu("Child Window");
        JMenuItem menuItem = new JMenuItem("New");
        menuItem.addActionListener(new MenuItemListener());
        menu.add(menuItem);
        menubar.add(menu);
        setJMenuBar(menubar);

        // Set some window parameters
        setTitle("Main Window");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setExtendedState(MAXIMIZED_BOTH);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        MainWindow app = new MainWindow();
    }

    private class MenuItemListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            ChildWindow child = new ChildWindow();
             desktop.add(child);
            try
            {
                child.setMaximum(true);
            } catch(PropertyVetoException ex)
            {
                ex.printStackTrace();
            }
            child.moveToFront();
        }
    }
}
ChildWindow - Klasse:

Code:
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;

public class ChildWindow extends JInternalFrame
{
    public ChildWindow()
    {
        super("Child Window", true, true, true, true);
        JButton button = new JButton("Close");
        button.addActionListener(new ButtonListener());
        getContentPane().add(button, BorderLayout.SOUTH);
        pack();
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setVisible(true);
    }

    private JInternalFrame getChildReference()
    {
        return this;
    }

    private class ButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            getChildReference().dispose();
        }
    }
}
Welche Möglichkeiten gibt es, diese Probleme zu lösen?

Grüsse,
Alex
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen