2015-06-16 3 views
4
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 

public class Circle extends JPanel { 
private final ArrayList<Point> point = new ArrayList<>(); 

public Circle() { 
    addMouseListener(new MouseAdapter() { 
     public void mousePressed(MouseEvent event) { 
      point.add(event.getPoint()); 
      repaint(); 
     } 
    }); 

    addMouseMotionListener(new MouseMotionAdapter() { 
     public void mouseDragged(MouseEvent event) { 
      point.add(event.getPoint()); 
      repaint(); 
     } 
    }); 
} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(new Color(0, 0, 128)); 
    for (Point p : point) 
     g.fillOval(p.x, p.y, 15, 15); 
} 

public static void main(String[] args) { 
    JFrame f = new JFrame(); 
    f.add(new Circle()); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setSize(800, 600); 
    f.setVisible(true); 
} 
} 

Вот пример программы.Java basic paint program Уродливая кисть

Рисунок его отображение уродливого разрыва:

enter image description here

Я смотрел много учебников для Java краски, но каждый раз их объяснение, как выше пример программы. Как Java может сделать гладкий стиль кисти, например, Microsoft Paint?

ответ

0

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

7

Вам нужно нарисовать линии между точками вместо овалов в каждой точке. Вот немного измененный paintComponent метод:

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D) g; 
    g2.setColor(new Color(0, 0, 128)); 
    g2.setStroke(new BasicStroke(15f, 
           BasicStroke.CAP_ROUND, 
           BasicStroke.JOIN_ROUND)); 
    for (int i = 1; i < point.size(); i++) 
     g2.draw(new Line2D.Float(point.get(i-1), point.get(i))); 
} 

Результат:

enter image description here