рисование по внешнему методу - PullRequest
0 голосов
/ 20 октября 2011

В моем апплете у меня есть метод paint, который рисует на экране.

public void init() {
  addMouseMotionListener(new MouseMotionAdapter() {
        @Override
                public void mouseMoved(MouseEvent evt) {
                    storeCoordinates(evt,Graphics g); // results in error
                }
    });
}

public void paint(Graphics g) {
      // do something
}

public void storeCoordinates(MouseEvent evt , Graphics g) {
      // from this method i want to modify the scene painted by paint
}

Теперь в другом методе я хочу изменить немного сцену, которая была нарисованаметод paint.Как я могу это сделать ?Как и я хочу нарисовать синие линии, используя g.drawLine(.,.,.,.) из другого метода.

Приведенный выше фрагмент кода генерирует ошибку: ) expected ; expected, cannot find symbol variable Graphics, когда я вызываю функцию из mouseMoved

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

В ответ на правки:

Так что я бы в этом случае не использовал графику прямо здесь. Вместо этого я бы сделал что-то вроде этого ... Держите список своих точек, и когда вы нажмете, добавьте точку в свой список. Затем, когда вы рисуете, рисуйте свои очки. (Если вы будете рисовать только при щелчке, вы можете просто сохранить последнюю точку, нарисовать линию между текущей точкой и последней точкой и установить последнюю точку для текущей точки. Но это более расширяемо.)

List<Point> points = new ArrayList<Points>();

public void init() {
  addMouseMotionListener(new MouseMotionAdapter() {
        @Override
                public void mouseMoved(MouseEvent evt) {
                    storeCoordinates(evt); // graphics removed
                }
    });
}

public void paint(Graphics g) {
    for(int i = 1; i < points.size(); i++) {
        Point first = points.get(i - 1);
        Point second = points.get(i);
        g.setColor(Color.BLUE);
        g.drawLine(first.getX(), first.getY(), second.getX(), second.getY());
    }
}

public void storeCoordinates(MouseEvent evt) {
    int x = evt.getX();
    int y = evt.getY();
    points.add(new Point(x,y));
}

.

Старый ответ

Передайте ваш графический объект в качестве параметра этому другому методу.

public void paint(Graphics g) {
    externalPaint(g);
}

private void externalPaint(Graphics g) {
    g.drawLine(1,2,3,4);
}
1 голос
/ 20 октября 2011

Теперь в другом методе я хочу изменить сцену, нарисованную методом рисования. Как я могу это сделать?

Звоните Component.repaint(int,int,int,int) или JComponent.repaint(Rectangle).

...