JInternalFrames in JDesktopPane anordnen



  • Hallo,
    gibt es eine fertige Lösung um die JInternalFrames in einem JDesktopPane horizontal, vertikal und kaskadierend anzuordnen, oder muss man das selbst implementieren?

    Vielen Dank



  • ich fürchte, sowas musst du dir selbst bauen. ist zwar nicht sonderlich aufwendig (grob geschätzt drei zeilen code), aber wär echt wünschenswert, wenn jdesktoppane ein wenig mehr komfort bieten würde. vor allem hätt ich gern mal die möglichkeit, automatisches dock snapping zu aktivieren.



  • Wie soll das in drei Zeilen gehen? Ich muss doch die Größe des JDesktopPane nehmen und anhand der Anzahl der JInternalFrames ausrechnen, wie wiele ich z. B. nebeneinander setzen kann und wie breit diese sein müsten. Danach müsste man über alle JInternalFrames loopen und die Positionen und Größe setzen.
    Ich werde das morgen mal umsetzen und posten.



  • void arrange(final JDesktopPane pane, imt xoff, int yoff, final Dimension dim)
    {
      final JInternalFrame[] frames = pane.getAllFrames();
      for(int i = 0; i < frames.length; ++i)
      {
        frames[i].resize(dim);
        frames[i].setLocation(new Dimension(i * xoff, i * yoff));
      }
    }
    
    void cascade(final JDesktopPane pane)
    {
      arrange(pane, 30, 30, new Dimension(400, 300));
    }
    
    void tileH(final JDesktopPane pane)
    {
      final int width = pane.getWidth() / pane.getAllFrames().length;
      arrange(pane, width, 0, new Dimension(width, pane.getHeight()));
    }
    
    void tileV(final JDesktopPane pane)
    {
      final int height = pane.getHeight() / pane.getAllFrames().length;
      arrange(pane, 0, height, new Dimension(pane.getWidth(), height));
    }
    

    zum beispiel so (ungetestet). wobei es wohl schlauer wäre, die interne größe des panes zu nehmen. die ist nur komplizierter zu besorgen.


Anmelden zum Antworten