Scrollable JDesktopPane?

j'aimerais ajouter la capacité de défilement à un javax.swing.JDesktopPane. Mais, l'emballage dans un javax.swing.JScrollPane ne produit pas le comportement désiré.

recherche sur le web montre que c'est un problème depuis un certain temps. Il y a solutions là-bas, mais ils semblent être assez vieux, et je ne suis pas complètement satisfait avec eux.

activement maintenu solutions connaissez-vous?

12
demandé sur Greg Mattes 2008-09-29 17:51:31

3 réponses

j'ai utilisé la solution de JavaWorld en créant mon propre JScrollableDesktopPane.

6
répondu Swati 2008-09-29 13:56:10

j'ai trouvé ceci : http://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jscroll.html?page=1

c'est un joli tutoriel avec beaucoup d'explications et d'infos sur Swing & so, qui permet de créer un JscrollableDesktopPane avec beaucoup de choses.

Vous aurez besoin de modifier un peu certaines parties de code pour répondre à vos besoins.

Profitez-en !

1
répondu Benj 2012-10-13 14:11:51

Javaworld est JScrollableDesktopPane n'est plus disponible sur leur site web. J'ai réussi à en tirer des copies, mais aucune ne marche.

une solution simple que j'ai dérivée peut être réalisée en faisant quelque chose comme ce qui suit. Ce n'est pas le plus joli, mais il fonctionne certainement mieux que le comportement par défaut.

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();  
    }
}

l'idée étant d'envelopper JDesktopPane dans un JScrollPane, ajouter un écouteur redimensionné sur le cadre principal et ensuite évaluer le contenu du JDesktopPane taille (ou l'ajout de de nouveaux éléments).

J'espère que cela aidera quelqu'un là-bas.

1
répondu Atta 2016-11-25 02:27:55