JPanel сетка проблема - PullRequest
       12

JPanel сетка проблема

3 голосов
/ 11 января 2011

Хорошо, я реализую редактор потоковых диаграмм на Java. Моя цель - предоставить возможность отображать линии сетки на поверхности рисования. Я частично сделал это, чтобы работать:

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;

    // Scrolling
    g2.transform(transformation);   

    // Step one: draw grid
    if(showGrid)
    {
        // Horizontal grid lines
        for(int i = -1; i < getSize().getWidth(); i += 50)
        {
            g2.drawLine(i, 0, i, (int)getSize().getHeight());
        }
        // Vertical grid lines
        for(int i = -1; i < getSize().getHeight(); i += 50)
        {
            g2.drawLine(0, i, (int)getSize().getWidth(), i);
        }
    }

    // Step two: draw symbols
    // ...
}

Результаты таковы: alt text

Но, если прокрутить диаграмму вниз или вверх, я получу это: alt text

Как видно, диаграмма прокручивается, но не сетка. Я также пытался поместить код первого шага перед строкой g2.transform (преобразование), но после этого, если я прокручиваю, линии сетки не перемещаются.

Итак, вопрос: есть ли способ нарисовать линии сетки и избежать упомянутого поведения? Цель состоит в том, чтобы прокрутить сетку вместе с другими элементами на диаграмме.

  1. Элемент списка

Ответы [ 2 ]

1 голос
/ 11 января 2011

Сетка прокручивается, но линии не расширяются до новых границ.

Сетка прокручивается вместе с объектами. Вот почему в нижней части второй диаграммы есть пустое место. Верх сетки был прокручен с верхней части панели. Нижняя часть сетки была прокручена над нижней частью панели. Линии сетки переместились.

Единственная проблема, которую я вижу, состоит в том, что линии сетки всегда должны доходить до границ видимой области. Чтобы сделать это, вам нужно обратить преобразование для getWidth и getHeight, а затем нарисовать линии сетки на всех кратных 50 между этими значениями.

0 голосов
/ 11 января 2011

Нарисуйте всю диаграмму и поместите ее в JScrollPane вместо того, чтобы преобразовывать действия прокрутки самостоятельно.

...