with mostrar menus example dentro create java swing user-interface jscrollpane jdesktoppane

mostrar - panel in java



Scrollable JDesktopPane? (3)

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

La búsqueda en la web muestra que esto ha sido un problema durante bastante tiempo. Hay algunas soluciones , pero parecen ser bastante antiguas, y no estoy completamente satisfecho con ellas.

¿Qué soluciones mantenidas activamente conoces?




JScrollableDesktopPane de JScrollableDesktopPane ya no está disponible en su sitio web. Logré buscar algunas copias pero ninguna de ellas funciona.

Una solución simple que he obtenido 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 , agregar un oyente de cambio de tamaño en el Marco principal y luego evaluar el contenido de JDesktopPane en el JDesktopPane de tamaño (o agregar nuevos elementos).

Espero que esto ayude a alguien por ahí.