Полосы прокрутки JScrollPanes не отображаются - PullRequest
3 голосов
/ 30 ноября 2011

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

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

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 ]

2 голосов
/ 30 ноября 2011

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

или

, чтобы вызвать setPreferredSize() для панелей, чтобы отразить размер изображения.

0 голосов
/ 01 декабря 2011

Спасибо за подсказку, Станислав, я на самом деле понял это и заставил его работать час назад, но вы дали правильный путь, чтобы исправить это с помощью предпочитаемым атрибутом. В итоге я заново реализовал 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();
}
...