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í.
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. –