Frage

Ich habe also ein Gitterlayout, das JScrollPane in jeder Zelle speichert. Diese werden auch für andere Zwecke in ein Array gebracht. Die "Ansicht" erweitert sich "jpanel", sodass es nur ein reguläres Panel mit Bildunterstützung ist. Die Anwendung beginnt mit Zellen, die mit Scrollpane gefüllt sind, die die Ansicht enthalten, die noch kein Bild hat.

Zu diesem Zeitpunkt sehe ich keine Scrollbar, aber das spielt keine Rolle, da sich nichts im Jpanel befindet. Sobald ich ein Bild öffne und Drawimage in der Paintcomponenet des JPanel verwende, sehe ich keine Scrollbars auf. So erstelle ich das Raster und die Scrollpane

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

Ich bin mir nicht ganz sicher, warum die Scrollbars nicht auftauchen. Sollten sie für das Bild im Panel eingestellt worden sein?

Hier ist ein Bild der Anwendung, da Sie sehen können, dass das Bild des Schuhs keine Scrollbars erhält. Es gibt also keine Möglichkeit, den Rest des Bildes anzuzeigen:

Bild

War es hilfreich?

Lösung 2

Vielen Dank für den Hinweis Stanislav, ich habe es tatsächlich herausgefunden und es vor einer Stunde zum Laufen gebracht, aber Sie haben den richtigen Weg gegeben, um es mit dem Attribut für Vorzugsgröße zu beheben. Am Ende habe ich GetPreferredSize mit der Größe des Bildes innerhalb des Panels neu implementiert und das Lackierereignis so neu identifiziert, damit die Balken angezeigt werden, sobald das Bild geladen ist.

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

Andere Tipps

Sie können entweder Benutzer nicht jpanel mit Bild, sondern üblich JLabel mit dem Bild

oder

Anruf setPreferredSize() Damit die Panels die Größe des Bildes widerspiegeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top