3 votes

Les barres de défilement JScrollPanes ne s'affichent pas

J'ai donc une grille qui stocke des JScrollPane dans chaque cellule. Ceux-ci sont également placés dans un tableau à d'autres fins. Le "View" étend le "JPanel" de sorte qu'il s'agit simplement d'un panneau normal avec prise en charge des images. L'application démarre avec des cellules remplies de scrollPane qui contiennent la vue qui n'a pas encore d'image.

À ce stade, je ne vois pas de barre de défilement, mais cela n'a pas d'importance puisqu'il n'y a rien à l'intérieur du JPanel. Dès que j'ouvre une image et que j'utilise drawImage dans le paintComponenet du JPanel, je ne vois plus de barre de défilement. Voici comment je crée la grille et la barre de défilement

private void createContentPane() 
{
        GridLayout gridLay = new GridLayout(GRID_ROWS, GRID_COLUMNS);
        perspectiveTbl = new JScrollPane[NUM_PERSPECTIVE];
        mainPane = new JPanel();
        mainPane.setLayout(gridLay);

        int idx = 0;

        while(idx < perspectiveTbl.length)
        {
            perspectiveTbl[idx] = new JScrollPane(new View(modelImage));
            mainPane.add(perspectiveTbl[idx]);
            idx++;
        }

        this.getContentPane().add(mainPane, BorderLayout.CENTER);
}

Je ne sais pas exactement pourquoi les barres de défilement ne s'affichent pas, auraient-elles dû être placées dans le panneau de l'image ?

Voici une image de l'application, comme vous pouvez le voir l'image de la chaussure ne reçoit pas de barre de défilement, il n'y a donc aucun moyen de voir le reste de l'image :

Photo

2voto

StanislavL Points 31343

Vous pouvez utiliser non pas le JPanel avec l'image mais le JLabel habituel avec l'image.

ou

appel setPreferredSize() pour les panneaux afin de refléter la taille de l'image.

0voto

Patrick.SE Points 1601

Merci pour l'astuce Stanislav, j'ai trouvé la solution et je l'ai fait fonctionner il y a une heure, mais vous m'avez donné le bon chemin pour résoudre le problème avec l'attribut preferredSize. J'ai fini par réimplémenter getPreferredSize avec la taille de l'image à l'intérieur du panneau, j'ai ajouté revalidate à l'événement paint pour que les barres apparaissent dès que l'image est chargée.

public void paintComponent(Graphics g) 
{
    super.paintComponent(g);
    g.drawImage(image, 0, 0, null);
    this.getViewScrollPane().revalidate();
}

public Dimension getPreferredSize() 
{
    if(image != null)
        return new Dimension(image.getWidth(),image.getHeight());
    else
        return super.getPreferredSize();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X