Swing Fokus JInternalFrame fehlerhaft

juandeluca

Mitglied
Hallo!

Ich bin neu im Umgang mit Swing, also bitte einfach nachfragen, falls eine Information fehlt.

Habe mir ein JFrame, in welches ich ein JDesktopPane gezogen habe. Über ein JMenuItem in einem JMenu, welches sich wiederum in einer JMenuBar befindet, hole ich mir mehrere JInternalFrame auf den JDesktopPane nach dem Muster:

Java:
    private ApplicationPresentation.frmLogin frmLogin1;

    private void mniLoginMouseReleased(java.awt.event.MouseEvent evt) {                                       
        frmLogin1 = new ApplicationPresentation.frmLogin();
        frmLogin1.setVisible(true);
        frmLogin1.setMaximizable(true);
        frmLogin1.setResizable(true);
        frmLogin1.setClosable(true);

        jDesktopPane1.add(frmLogin1, javax.swing.JLayeredPane.DEFAULT_LAYER);
    }

Wenn ich nun allerdings nach diesem Muster verschiedene JInternalFrame nacheinander in das JInternalFrame hole, dann starten sie völlig durcheinander im Bezug auf den Fokus, d.h. dass manche JInternalFrame hinter anderen gestartet werden. Ich muss also erst die anderen Fenster zur Seite schieben, um an die soeben gestarteten Fenster zu kommen.

Was muss ich machen, um das zuletzt gestartete JInternalFrame im Fokus zu haben?

Vielen Dank für jede Hilfe!
 
Kommt dann wenigstens eine Fehlermeldung oder ähnliches?

Funktioniert folgener Code
Java:
	JFrame frame = new JFrame();
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	final JDesktopPane pane = new JDesktopPane();
	frame.setContentPane(pane);
	frame.setBounds(0, 0, 200, 200);
	frame.setVisible(true);
	new Thread(new Runnable() {
		private int a = 1;
		public void run() {
			while (true) {
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				JInternalFrame iFrame = new JInternalFrame("Frame " + a, true, true, true, true);
				iFrame.setBounds(a * 10, a * 10, 100, 100);
				iFrame.setVisible(true);
				pane.add(iFrame);
				try {
					iFrame.setSelected(true);
				} catch (PropertyVetoException e) {
					e.printStackTrace();
				}
				a++;
			}
		}
	}).start();
 
Alles klar! Es funktioniert, wenn ich:
Java:
        try {
            frmInventory1.setSelected(true);
        } catch (PropertyVetoException ex) {
            Logger.getLogger(frmMain.class.getName()).log(Level.SEVERE, null, ex);
        }

nach folgendem aufrufe:

Java:
jDesktopPane1.add(frmInventory1, javax.swing.JLayeredPane.DEFAULT_LAYER);

Vielen Dank!
 

Zurück
Oben