السلام عليكم ورحمة الله وبركاته
اريد ان اعرف كيف يمكنني رسم مجموعة خطوط بنفس الوقت كل واحد فيهم له نقطة بداية مختلفة ولكن لهم نفس نقطة النهاية عن طريق سحب الماوس
السلام عليكم ورحمة الله وبركاته
اريد ان اعرف كيف يمكنني رسم مجموعة خطوط بنفس الوقت كل واحد فيهم له نقطة بداية مختلفة ولكن لهم نفس نقطة النهاية عن طريق سحب الماوس
إجعل إحداثيات نقطة النهاية التي تحصل عليها في أول mouseReleased هي نقطة النهاية بالنسبة لباقي الأسطر. أين المشكل؟
لم افهم
وماذا عن نقطة البداية لكل خط؟
أنا أيضا لم أفهم ![]()
هل تريد رسم عدة خطوط بضغطة واحدة؟
اول شئ ارسم خطوط لها نقاط بداية مختلفة وتنتهي في نقطة واحدة (نفس نقطة النهاية)
وعندما اقوم بسحب نقطة النهاية يتم سحب جميع الخطوط معها (اي تتغير نقطة النهاية بدون تغير نقاط البداية)
نعم انا احددها بالنقر على الماوس وارسم الخطوط بالماوس واسحبها كذلك كما اسلفت بالماوس
في 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);
}
}شكرا اخي بجربه على برنامجي وبشوف
ممكن تحكولي كيف اقدر اغير عرض الخط؟
Graphics2D g2 = (Graphics2D)g; g2.setStroke(new BasicStroke(3));