2017-01-14 2 views
0

Я пытаюсь написать GraphicsProgram, которая позволяет пользователю рисовать линии на холсте. Нажатие кнопки мыши устанавливает начальную точку линии. Перетаскивание мыши перемещает другую оконечную точку вокруг по мере продолжения перетаскивания. Освобождение мыши фиксирует линию в текущей позиции и готовится к запуску новой строки.Простая графическая интерактивность

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

Мой код: `

import acm.program.*; 
import java.awt.event.MouseEvent; 
import acm.graphics.*; 

public class DrawLines extends GraphicsProgram{ 

public void init(){ 
    addMouseListeners(); 
    line=new GLine(x1,y1,x2,y2); 
} 

public void mousePressed(MouseEvent e){ 
    x1=e.getX(); 
    y1=e.getY(); 
} 
public void mouseDragged(MouseEvent e){ 
    x2=e.getX(); 
    y2=e.getY(); 
    add(line); 
} 

private GLine line; 
private int x1; 
private int y1; 
private int x2; 
private int y2; 

}

Правильный код:

import acm.graphics.*; 
import acm.program.*; 
import java.awt.event.*; 

/** This class allows users to drag lines on the canvas */ 
public class RubberBanding extends GraphicsProgram { 
    public void run() { 
     addMouseListeners(); 
    } 

/** Called on mouse press to create a new line */ 
    public void mousePressed(MouseEvent e) { 
     double x = e.getX(); 
     double y = e.getY(); 
     line = new GLine(x, y, x, y); 
     add(line); 
    } 
/** Called on mouse drag to reset the endpoint */ 
    public void mouseDragged(MouseEvent e) { 
     double x = e.getX(); 
     double y = e.getY(); 
     line.setEndPoint(x, y); 
    } 

/* Private instance variables */ 
    private GLine line; 
} 
+1

Выполняет ли этот класс GraphicsProgram runnable? –

ответ

0

Первая программа только когда-либо создает один GLine, что, так как неинициализированные int поля инициализируются к нулю, всегда от (0,0) до (0,0). На событиях пресса и события перетаскивания он обновляет переменные x1, y1, x2, y2, но никогда ничего не делает с этими значениями.

Каждое событие перетаскивания добавляет еще одну ссылку line (исходная (0,0) - (0,0) строка) в список/набор линий, которые нужно нарисовать.

Смежные вопросы