Я хотел бы добавить возможность прокрутки в javax.swing.JDesktopPane. Но упаковка в javax.swing.JScrollPane не дает желаемого поведения.
Поиск в сети показывает, что это было проблемой в течение некоторого времени. Есть немногорешения, но они кажутся довольно старыми, и я не полностью ими доволен.
Какие решения активно поддерживается вы знаете?




Я использовал Решение JavaWorld, создав свой собственный JScrollableDesktopPane.
Я нашел это: http://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jscroll.html?page=1
Это хороший учебник с множеством объяснений и информации по Swing & so, который позволяет создать JscrollableDesktopPane с большим количеством вещей.
Вам нужно будет немного изменить некоторые части кода, чтобы они соответствовали вашим требованиям.
Наслаждаться !
Упс, забыл прямую ссылку на источник: javaworld.com/javaworld/jw-11-2001/jscroll/jw-1130-jscroll.j ar
JScrollableDesktopPane от Javaworld больше не доступен на их веб-сайте. Мне удалось раздобыть несколько его копий, но ни одна из них не работает.
Я нашел простое решение, которое можно получить, выполнив следующее. Это не самое красивое, но определенно работает лучше, чем поведение по умолчанию.
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();
}
}
Идея состоит в том, чтобы обернуть JDesktopPane в JScrollPane, добавить слушателя изменения размера в основной фрейм и затем оценить содержимое JDesktopPane при изменении размера (или добавлении новых элементов).
Надеюсь, это поможет кому-то там.
На самом деле это мое текущее решение, но оно меня не в восторге. Я решил спросить здесь, прежде чем приступить к собственному проекту, чтобы создать тот, который мне нравится.