PDA

View Full Version : سوال: رسم شکل بر روی فریم با استفاده از موس



Sina.iRoid
سه شنبه 29 مهر 1393, 17:13 عصر
سلام.
دوستان من کد زیر و از روی کتاب دایتل نوشتم اما اصلا متوجه نمیشیم که چه طوری نوشته.
در مورد نقطه ها اصلا اطلاع ندارم. اینکه چرا از نقطه استفاده می کنن و چرا از محور های x و y هم استفاده شده. در کل بخش اصلی برنامه یعنی دو تا حلقه for و اصلا متوجه نمیشم.
ممنون میشم اگر یه راهنمایی کوچیک کنید.


import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;


import javax.swing.JPanel;


@SuppressWarnings("serial")
public class PaintPanel extends JPanel {

private int pointCoutn = 0; //Count number of point

private Point[] points = new Point[1000]; //array of point with length 10000

//Constructor
public PaintPanel() {

addMouseMotionListener(new MouseMotionAdapter() {

@Override
public void mouseDragged(MouseEvent e){
if (pointCoutn < points.length) {
points[pointCoutn] = e.getPoint();
++pointCoutn;
repaint();
}
}
});
}

@Override
public void paintComponent(Graphics g){
super.paintComponent(g);

//draw all point in array
for (int i = 0; i < pointCoutn; i++) {
g.fillOval(points[i].x, points[i].y, 4, 4);
}
}
}



import java.awt.BorderLayout;


import javax.swing.JFrame;




public class DriverClass {

public static void main(String[] args) {

JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setVisible(true);

PaintPanel paintPanel = new PaintPanel();
frame.add(paintPanel, BorderLayout.CENTER);
new PaintPanel();
}
}


و یه سوال دیگه اینکه اگر آرایه به پایان برسه دیگه چیزی رسم نمیشه. برای این چیکار باید انجام بدیم؟
ممنون.

محمد فدوی
سه شنبه 29 مهر 1393, 18:20 عصر
اول ببینیم هدف برنامه چیه. هدف اینه که یه فریم بسازیم که توش یه پنل هست و وقتی ماوس رو روی این پنل حرکت میدیم همه‌ی نقاطی که ازشون رد میشیم رو ثبت کنیم و برروی هر نقطه یه دایره به شعاع ۴ رسم کنیم.

خب در کلاس PaintPanel، تو متد mouseDragged همه‌ی نقاطی که در هنگام Drag کردن ماوس ثبت میشه رو توی یه آرایه نگهداری میکنیم و در پایان پنل رو دوباره رسم میکنیم (repaint)
حالا موقع دوباره رسم شدن پنل چه اتفاقی میفته؟
به ازای همه‌ی نقاط موجود توی آرایه‌ی نقاط، یه دایره با شعاع ۴ توی همون نقطه رسم میکنیم.
برای اینکه بتونیم تعداد دلخواهی نقطه رو رسم کنیم کافیه به جای آرایه از ساختاری مثل ArrayList استفاده کنیم:

import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;


@SuppressWarnings("serial")
public class PaintPanel extends JPanel {
private ArrayList<Point> points = new ArrayList<Point>();


public PaintPanel() {
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e){
points.add(e.getPoint());
repaint();
}
});
}


@Override
public void paintComponent(Graphics g){
super.paintComponent(g);


for(Point point: points) {
g.fillOval(point.x, point.y, 4, 4);
}
}
}