Javaworld's JScrollableDesktopPane
nie jest już dostępny na ich stronie internetowej. Udało mi się wyrysować kilka kopii, ale żaden z nich nie działa.
Proste rozwiązanie, które otrzymałem, można osiągnąć, wykonując następujące czynności. Nie jest najładniejsza, ale z pewnością działa lepiej niż domyślne zachowanie.
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();
}
}
Pomysł jest owinąć JDesktopPane
w JScrollPane
, dodać detektor zmiany rozmiaru na ramie głównej, a następnie oceniać zawartość JDesktopPane
na zmiany rozmiaru (lub dodanie nowych elementów).
Mam nadzieję, że to komuś pomaga.
To także moje obecne rozwiązanie, ale nie jestem nim zachwycony. Postanowiłem zapytać tutaj przed rozpoczęciem własnego projektu, aby stworzyć taki, który mi się podoba. –