Salut, je suis en train de créer coeur forme pour mon application et que je pouvais faire une creuse et il fonctionne bien, maintenant je dois le dessiner avec la méthode utilisé, mais il est créé par deux Arc2D.Double et deux Line2D.Double donc à cause de cela juste le remplissage de l'Arc et deux lignes non.J'ai essayé d'ajouter ces deux lignes dans deux 'Area' différents et d'ajouter ces deux zones en une, mais aussi pas travaillé.Comment remplir entre deux Line2D.Double?
Il ya un moyen de le faire (remplissage entre deux lignes)? Merci d'avance.
Mes codes: Classe coeur
`public class HeartShape {
private ArrayList<Shape> shapes;
public HeartShape() {
}
public ArrayList<Shape> Heart(double x, double y, double HEART_RADIUS) {
shapes = new ArrayList<>();
double r = HEART_RADIUS;
double root2 = Math.sqrt(2);
double cx = x;
double cy = y;
double dx = r/root2;
double heights = 3 * dx + r;
double top = cy - heights/2;
double bottom = cy + heights/2;
Shape s = new Arc2D.Double(cx - dx - r, top, 2 * r, 2 * r, 45, 180, Arc2D.OPEN);
shapes.add(s);
s = new Arc2D.Double(cx + dx - r, top, 2 * r, 2 * r, -45, 180, Arc2D.OPEN);
shapes.add(s);
s = new Line2D.Double(cx, bottom, cx - 2 * dx, bottom - 2 * dx);
shapes.add(s);
s = new Line2D.Double(cx, bottom, cx + 2 * dx, bottom - 2 * dx);
shapes.add(s);
if (shapes != null) {
return shapes;
} else {
return null;
}
}
public void drawHeart(Graphics2D g2d, boolean isFilled) {
if (isFilled == true) {
shapes.forEach((ss) -> {
g2d.fill(ss);
});
} else {
shapes.forEach((ss) -> {
g2d.draw(ss);
});
}
}`
Et DrawinTest:
public class DrawinTest extends JPanel{
private int HEART_RADIUS;
private Point startpoint;
private int x, y, width, height;
private HeartShape heartShape = new HeartShape();
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new DrawinTest();
}
public DrawinTest() {
JFrame f = new JFrame("Test Area");
f.setPreferredSize(new Dimension(600, 500));
f.setLocationRelativeTo(null);
f.setLayout(new BorderLayout(0, 1));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addMouseListener(new MyMouseListener());
this.addMouseMotionListener(new MyMouseListener());
this.setBackground(Color.WHITE);
f.setContentPane(this);
f.setVisible(true);
f.pack();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(3));
g2d.setColor(Color.RED);
if(heartShape != null) {
heartShape.Heart(x, y, HEART_RADIUS);
heartShape.drawHeart(g2d, false);
}
g2d.dispose();
}
class MyMouseListener implements MouseListener,MouseMotionListener {
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
startpoint = new Point(e.getPoint());
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mouseDragged(MouseEvent e) {
x = Math.min(startpoint.x, e.getX());
y = Math.min(startpoint.y, e.getY());
width = Math.abs(startpoint.x - e.getX());
height = Math.abs(startpoint.y - e.getY());
HEART_RADIUS = Math.min(width, height);
repaint();
}
@Override
public void mouseMoved(MouseEvent e) {}
}
}
Jusqu'à présent, son qui ressemble à ceci:
Utilisez l'API 'Shape' pour générer une forme" fermée "- [Comme exemple conceptuel] (http://stackoverflow.com/questions/30041397/comment-peindre-un-groupe-de-quadcourbes-en utilisant-java-graphics2d/30042600 # 30042600) – MadProgrammer
@MadProgrammer merci de replay rapide, pouvez-vous me montrer comment faire s'il vous plaît? Parce que mon cerveau est fatigué d'y faire face. –
Oui, j'ai ajouté un exemple de lien au commentaire précédent;) – MadProgrammer