2008-09-29 11 views
12

Ich möchte Scroll-Funktion zu einem javax.swing.JDesktopPane hinzufügen. Das Einwickeln in eine javax.swing.JScrollPane erzeugt jedoch nicht das gewünschte Verhalten.Scrollbare JDesktopPane?

Searching the web zeigt, dass dies seit einiger Zeit ein Problem ist. Es gibt somesolutions da draußen, aber sie scheinen ziemlich alt zu sein, und ich bin nicht ganz mit ihnen zufrieden.

Was aktiv gepflegt Lösungen wissen Sie?

Antwort

6

Ich habe meine eigenen JavaWorld's solution indem verwendet JScrollableDesktopPane.

+0

Das ist eigentlich meine aktuelle Lösung, aber ich bin nicht begeistert davon. Ich habe mich entschieden, hier zu fragen, bevor ich mein eigenes Projekt in Angriff nehme, um eines zu schaffen, das mir gefällt. –

1

Ich habe dies gefunden: http://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jscroll.html?page=1

Es ist ein schönes Tutorial mit vielen Erklärungen und Info auf Schwingen & so, das eine JscrollableDesktopPane zu schaffen erlaubt mit vielen Sachen.

Sie müssen einige Teile des Codes ändern, um Ihre Anforderungen zu erfüllen.

Viel Spaß!

+0

Hoppla, vergiss den direkten Link zur Quelle: http://www.javaworld.com/javaworld/jw-11-2001/jscroll/jw-1130-jscroll.jar – Benj

1

Javaworlds JScrollableDesktopPane ist nicht mehr auf ihrer Website verfügbar. Ich schaffte es, einige Kopien davon zu kopieren, aber keiner von ihnen funktioniert.

Eine einfache Lösung, die ich abgeleitet habe, kann erreicht werden, etwas wie das folgende zu tun. Es ist nicht das Schönste, aber es funktioniert sicherlich besser als das Standardverhalten.

public class Window extends Frame { 
    JScrollPane scrollContainer = new JScrollPane(); 
    JDesktopPane mainWorkingPane = new JDesktopPane(); 

    public Window() { 
     scrollContainer.setViewportView(mainWorkingPane); 

     addComponentListener(new ComponentAdapter() { 
      public void componentResized(ComponentEvent evt) { 
       revalidateDesktopPane(); 
      } 
     }); 
    } 

    private void revalidateDesktopPane() { 
     Dimension dim = new Dimension(0,0); 
     Component[] com = mainWorkingPane.getComponents(); 
     for (int i=0 ; i<com.length ; i++) { 
      int w = (int) dim.getWidth()+com[i].getWidth(); 
      int h = (int) dim.getHeight()+com[i].getHeight(); 
      dim.setSize(new Dimension(w,h)); 
     } 
     mainWorkingPane.setPreferredSize(dim); 
     mainWorkingPane.revalidate(); 
     revalidate(); 
     repaint(); 
    } 
} 

Die Idee ist, in einem JDesktopPaneJScrollPane einzuwickeln, einen Resize Zuhörer auf dem Hauptrahmen hinzuzufügen und bewerten dann den Inhalt der JDesktopPane auf Resize (oder das Hinzufügen neue Elemente).

Hoffe das hilft jemand da draußen.