Вопрос

Итак, у меня есть сетка, в которой хранится JScrollPane в каждой ячейке. Они также помещаются в массив для других целей. «Просмотр» расширяет «jpanel», так что это просто обычная панель с поддержкой изображения. Приложение запускается с ячейки, заполненных ScrollPane's, которые содержат представление, у которого еще нет изображения.

В этот момент я не вижу прокрутки, но это не имеет значения, так как внутри JPanel нет ничего. Как только я открываю изображение и использую DrawImage в PaintComponenet of JPanel, я не вижу появления Scrollbar. Вот как я создаю сетку и прокрутку

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

Я не совсем уверен, почему прокрутки не отображаются, они были установлены внутри панели для изображения?

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

Картина

Это было полезно?

Решение 2

Спасибо за подсказку Станислава, я на самом деле понял это и заработал его час назад, но вы дали правильный путь, чтобы исправить его с помощью атрибута PreferredSize. В итоге я переосмыслил getPreferredSize с размером изображения внутри панели, добавил переосмысление к событию краски, чтобы стержни отображались, как только изображение загружено.

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

Другие советы

Вы можете либо пользователю, а не JPanel с изображением, но обычно Jlabel с изображением

или же

вызов setPreferredSize() Чтобы панели отражали размер изображения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top