2012-03-28 19 views
0

Ich entwickle eine Java-Anwendung mit einem Haupt-Panel, in dem ich eine JDesktopPane hinzufügen. Benutzer klicken auf JButton, zeigen eine JInternalFrame. Mein Problem ist, dass das JDesktopPane mit der richtigen Größe die JInternalFrame zeigt, wenn ich andere Look and Feel verwende, wird es JInternalFrame in der Dimension des Bildschirms angezeigt. Dies ist, was ich tue:Wie setze ich JDesktopPane Größe

Im Haupt JPanel:

jDesktopPane1 = new JDesktopPane(); 
setContentPane(jDesktopPane1); 

, wenn Benutzer klicken JButton(s):

public void addInDesktop(JInternalFrame frame){ 
     frame.setVisible(true); 
     try { 
         jDesktopPane1.setSize(frame.getSize()); 
         jDesktopPane1.setPreferredSize((frame.getSize())); 
         System.out.println(frame.getSize().toString()); 
         System.out.println(jDesktopPane1.getSize().toString()); 
      jDesktopPane1.add(frame); 
      frame.moveToFront(); 
      frame.setSelected(true); 
     } catch (PropertyVetoException e) { 
      e.printStackTrace(); 
     } 
    } 

Die System.out.println sagt mir, dass die Dimension der JDesktopPane und JInternalFrame gleich ist, aber warum es zeigt mir den JInternalFrame in voller Bildschirmgröße?

Antwort

2

Wenn Sie die Größen nach jDesktopPane1.add (Rahmen) ausdrucken würden, würden Sie dann wahrscheinlich die Größenänderung sehen. Ich würde vorschlagen, dass das Einstellen des Desktop-Bereichs auf die Größe des internen Rahmens eine schlechte Übung ist - ich hätte gedacht, dass es die Größe des Client-Bereichs des übergeordneten JFrames bleiben sollte, in dem der Desktop-Bereich sitzt (der Rahmen, in dem Sie setContentPane aufrufen (jDesktopPane1)), und lassen Sie einfach den internen Rahmen irgendwo innerhalb davon natürlich sitzen.

Was möglicherweise passieren wird ist, dass die Einstellung der Fenster und interne auf die gleiche Größe das Aussehen und Gefühl annehmen, dass Sie "maximiert" meinen, und so, wenn es die Größe des Desktopbereichs korrekt löst es etwas seltsam mit dem internen Rahmen.

Versuchen nicht Aufruf setSize()/setPreferredSize() auf dem Desktop Bereich und sehen, ob es dann L konsequent über verhält & Fs. Vielleicht können Sie dann herausfinden, was Sie am besten mit dem internen Frame tun, wenn die Standardgröße nicht Ihren Vorstellungen entspricht.

0

Wenn Sie die Größe so breit und hoch wie Ihr JFrame festlegen möchten, wo Sie in setzen wollen. Sie können die

verwenden
variable_desktopPane.setBounds(this.getBounds()); 

von this ich die JFrame meinen Sie seine Grenzen fordern.

Ich hoffe, das hilft, Grüße.