JScrollPane не перекрашивает Canvas при прокрутке? - PullRequest
1 голос
/ 26 марта 2012

Я пытаюсь создать игру, в которой я добавляю Canvas в JScrollPane, но холст больше, чем видимая область JScrollPane. Поэтому, когда я прокручиваю JScrollPane, чтобы увидеть все остальное, я вижу только пустую область, хотя мой Canvas постоянно перерисовывается. Кто-нибудь может мне помочь ??

Ответы [ 3 ]

9 голосов
/ 19 января 2013

Это распространенная проблема JScrollPane.Чтобы исправить это с минимальной суетой , вызовите следующие методы на JScrollPane:

scrollpane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
2 голосов
/ 26 марта 2012

Компоненты Swing не работают с такими тяжелыми компонентами AWT, как Canvas.Используйте JComponent или JPanel вместо Canvas

0 голосов
/ 24 апреля 2012

Вам нужно использовать легкий JPanel и 2 тяжелых объекта, таких как:

JPanel foreground = new JPanel();
Panel frame = new Panel();
Cavas canvas = new Cavas();
foreground.add(frame);
frame.add(canvas);

Тяжелые объекты могут быть AWT, SWT (с OLE) или смешанными, это не имеет значения.

Затем получите JScrollPane и добавьте AdjustmentListener, который вызывает такой метод, как:

private void updateLocation() {
    final JScrollPane scroll = getScrollPane();
    if (null == scroll) {
        // do nothing
        return;
    }
    final Point top = getLocation();
    final Rectangle visible = getVisibleRect();

    // set up new location
    frame.setSize(visible.width, visible.height);
    frame.setLocation(visible.x - top.x, visible.y - top.y);
    canvas.setSize(getWidth(), getHeight());
    canvas.setLocation(top.x - visible.x, top.y - visible.y);
}
...