الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

رسم مجموعة خطوط

بدأه sunn في 4 مايو 2011 · 10 رد · 574 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اريد ان اعرف كيف يمكنني رسم مجموعة خطوط بنفس الوقت كل واحد فيهم له نقطة بداية مختلفة ولكن لهم نفس نقطة النهاية عن طريق سحب الماوس

#2

إجعل إحداثيات نقطة النهاية التي تحصل عليها في أول mouseReleased هي نقطة النهاية بالنسبة لباقي الأسطر. أين المشكل؟

#3

لم افهم

وماذا عن نقطة البداية لكل خط؟

#4

أنا أيضا لم أفهم laugh.gif

هل تريد رسم عدة خطوط بضغطة واحدة؟

#5

اول شئ ارسم خطوط لها نقاط بداية مختلفة وتنتهي في نقطة واحدة (نفس نقطة النهاية)

وعندما اقوم بسحب نقطة النهاية يتم سحب جميع الخطوط معها (اي تتغير نقطة النهاية بدون تغير نقاط البداية)

#6

نقط البدايه انت التى تحددها

Software Developer
Mahmoudkelany.com


 

#7

نعم انا احددها بالنقر على الماوس وارسم الخطوط بالماوس واسحبها كذلك كما اسلفت بالماوس

#8

في mouseReleased الأول، خزن إحداثيات نقطة النهاية، ثم عند رسم أي خط جديد، تحدد نقطة نهايته في نقطة النهاية الأولى

مثال باستعمال الكود الذي كنت وضعته في موضوعك السابق

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class DrawLine extends JPanel {

	int x, y, z = -1, xstart, ystart;
	ArrayList<Line2D> lines = new ArrayList<Line2D>();
	ArrayList<String> linesLength = new ArrayList<String>();
	Line2D tempLine = new Line2D.Float();
	int xEnd = -1, yEnd = -1;


	public DrawLine() {
		addMouseMotionListener(new MouseAdapter() {

			@Override
			public void mouseDragged(MouseEvent e) {
				x = e.getX();
				y = e.getY();
				if (z == -1) {
					xstart = x;
					ystart = y;
					z++;
				}
				tempLine.setLine(xstart, ystart, x, y);
				repaint();
			}
		});
		addMouseListener(new MouseAdapter() {

			@Override
			public void mouseReleased(MouseEvent e) {
				String length = JOptionPane.showInputDialog("Enter the length of the line");
				linesLength.add(length);
				if (xEnd == -1 && yEnd == -1) {
					xEnd = (int)tempLine.getX2();
					yEnd = (int)tempLine.getY2();
				} else {
					tempLine.setLine(tempLine.getP1(), new Point2D.Float(xEnd, yEnd));
				}
				lines.add(new Line2D.Float(tempLine.getP1(), tempLine.getP2()));
				repaint();
				tempLine.setLine(0, 0, 0, 0);
				z = -1;
			}
		});

	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D)g;
		for (int i = 0; i < lines.size(); i++) {
			Line2D l = lines.get(i);
			g2.draw(l);
			int xString = (int)l.getX1() + ((int)l.getX2() - (int)l.getX1()) / 2;
			int yString = (int)l.getY1() + ((int)l.getY2() - (int)l.getY1()) / 2;
			g.drawString(linesLength.get(i), xString, yString);
		}
		g2.draw(tempLine);
	}

	public static void main(String[] args) {
		DrawLine panel = new DrawLine();
		JFrame frame = new JFrame();
		frame.add(panel);
		frame.setSize(400, 400);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
1
#9

شكرا اخي بجربه على برنامجي وبشوف

#10

ممكن تحكولي كيف اقدر اغير عرض الخط؟

#11
Graphics2D g2 = (Graphics2D)g;
g2.setStroke(new BasicStroke(3));
1

مواضيع مشابهة