2008-09-29 5 views
12

Me gustaría agregar capacidad de desplazamiento a un javax.swing.JDesktopPane. Pero envolver en un javax.swing.JScrollPane no produce el comportamiento deseado.Scrollable JDesktopPane?

Searching the web muestra que esto ha sido un problema desde hace bastante tiempo. Hay somesolutions por ahí, pero parecen ser bastante viejos, y no estoy completamente satisfecho con ellos.

¿Qué mantuvo activamente soluciones ¿sabes?

Respuesta

6

He usado JavaWorld's solution mediante la creación de mi propia JScrollableDesktopPane.

+0

Esa es en realidad mi solución actual también, pero no estoy muy contento con ella. Decidí preguntar aquí antes de embarcarme en mi propio proyecto para crear uno que me guste. –

1

he encontrado esto: http://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jscroll.html?page=1

Es un buen tutorial con un montón de explicaciones e informaciones en el oscilación & es así, que permite crear un JscrollableDesktopPane con muchas cosas

Deberá modificar un poco algunas partes del código para cumplir sus requisitos.

¡Disfrútalo!

+0

Vaya, olvidándose del enlace directo a la fuente: http://www.javaworld.com/javaworld/jw-11-2001/jscroll/jw-1130-jscroll.jar – Benj

1

Javaworld's JScrollableDesktopPane ya no está disponible en esta página web. Logré buscar algunas copias pero ninguna de ellas funciona.

Una solución simple que he derivado se puede lograr haciendo algo como lo siguiente. No es el más bonito, pero ciertamente funciona mejor que el comportamiento predeterminado.

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(); 
    } 
} 

La idea es envolver JDesktopPane en un JScrollPane, añadir un detector de cambio de tamaño en el bastidor principal y luego evaluar el contenido de la JDesktopPane el cambio de tamaño (o la adición de nuevos elementos).

Espero que esto ayude a alguien por ahí.

Cuestiones relacionadas