Использование JScrollPane - PullRequest
       20

Использование JScrollPane

1 голос
/ 25 февраля 2011

У меня есть JScrollPane и JPanel внутри (я хочу рисовать на JPanel). Также у меня есть метод, который рисует линии с параметром длины линии. Я хочу, чтобы моя JScrollPane прокручивалась, если длина строки больше размера (высоты или ширины) моей JPanel, которая находится на JScrollPane. Как я могу это сделать?

P.S. Я пробовал jScrollPane.scrollRectToVisible, но он не работает

Ответы [ 3 ]

1 голос
/ 25 февраля 2011

Вам необходимо определить следующий метод в классе LinePanel:

  public Dimension getPreferredSize() {
    return new Dimension(myLine.getWidth(), myLine.getHeight());
  }

Убедитесь, что объект myLine доступен для вышеуказанного метода.И вы получите полосы прокрутки по мере необходимости.

PS: я предполагаю, что LinePanel простирается JPanel и является панелью, на которой нарисована линия.

1 голос
/ 25 февраля 2011

Вот пример реализации того, что вы хотите

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class DrawLine {

    JFrame j;
    JPanel p;
    JScrollPane sp;

    public DrawLine() {
        j = new JFrame();
        p = new JPanel() {
            public void paintComponent(Graphics g) {
                g.drawLine(20, 20, 250, 250);
            }
        };
        p.setPreferredSize(new Dimension(300, 300));
        sp = new JScrollPane(p);
        j.getContentPane().add(sp);
        j.setSize(300, 300);
        j.setVisible(true);
    }

    public static void main(String[] args) {
            new DrawLine();
        }
}

Обратите внимание на строку p.setPreferredSize(new Dimension(300, 300));, которая устанавливает предпочтительный размер панели.

0 голосов
/ 25 февраля 2011

Вам необходимо связать JScrollPanel с JPanel, которую он прокручивает.То есть вам нужно

JScrollPane lineScrollPane = new JScrollPane(linePanel);

. Это создаст JScrollPane, который автоматически масштабирует себя для прокрутки по любому размеру linePanel.

Важно убедиться, что панель, содержащая вашу строкуна самом деле достаточно большой, чтобы вместить всю линию.То есть у вас может быть что-то вроде

linePanel.setSize(myLine.getWidth(), myLine.getHeight());

или любой другой размер вашей связанной строки.Обратите внимание, что что-то вроде

lineScrollPanel.setSize(new Dimension(600, 400));

изменит размер панели прокрутки, но не вещи внутри - то есть это будет панель прокрутки 600x400, но внутренняя панель может быть больше и меньше, и она будет прокручена.

...