G
Gast
Gast
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:
ChildWindow - Klasse:
Welche Möglichkeiten gibt es, diese Probleme zu lösen?
Grüsse,
Alex
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();
}
}
}
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