Прокручиваемый JDesktopPane?

Я хотел бы добавить возможность прокрутки в файл javax.swing.JDesktopPane. Но упаковка в javax.swing.JScrollPane не приводит к желаемому поведению.

Поиск в Интернете показывает, что эта проблема существует уже довольно давно. Есть некоторые решения есть, но они кажутся довольно старыми, и я не совсем ими доволен.

Какие активно поддерживаемые решения вы знаете?


person Community    schedule 29.09.2008    source источник


Ответы (3)


Я использовал решение JavaWorld создав собственный JScrollableDesktopPane.

person Swati    schedule 29.09.2008
comment
На самом деле это и мое текущее решение, но я не в восторге от него. Я решил спросить здесь, прежде чем приступить к своему собственному проекту, чтобы создать тот, который мне нравится. - person Greg Mattes; 29.09.2008

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 при изменении размера (или добавлении новых элементов).

Надеюсь, это поможет кому-то там.

person Community    schedule 16.06.2015

Я нашел это: http://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jscroll.html?page=1

Это хороший учебник с большим количеством объяснений и информации о Swing и так далее, который позволяет создать JscrollableDesktopPane с большим количеством вещей.

Вам нужно будет немного изменить некоторые части кода, чтобы выполнить ваши требования.

Наслаждаться !

person Community    schedule 13.10.2012
comment
К сожалению, забыл прямую ссылку на источник: javaworld.com/javaworld/jw-11-2001/jscroll/jw-1130-jscroll.jar - person Benj; 13.10.2012