View Full Version : حرفه ای: رسم خط روی عکس
teymoorei
پنج شنبه 23 خرداد 1392, 00:18 صبح
سلام دوستان
می خوام بتونم وقتی موس رو روی تصویر میکشم خط رسم کنم ضمنا یه خط راسته نباشه بلکه خطی که در امتداد حرکت موس هستش .
خیلی جستجو کردم اما چیز خوبی پیدا نشد لطفا راهنمایی کنید .
باتشکر
saeed-esfandi
پنج شنبه 23 خرداد 1392, 10:41 صبح
درست نمیدونم ولی فکر کنم اگر بجای رسم خط دنبال گذاشتن نقطه باشید بتونید به نتیجه برسید
یعنی هرجا ماوس هست یه نقطه به عکس اضاف بشه
spiderman200700
پنج شنبه 23 خرداد 1392, 11:45 صبح
سلام
یه نگاهی به اینجا بنداز
http://barnamenevis.org/showthread.php?328388-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%8 7%D8%A7%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%87-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AC%D8%A7%D9%88%D8%A7&p=1449810&viewfull=1#post1449810
teymoorei
شنبه 25 خرداد 1392, 11:40 صبح
سلام
دوست عزیزمون spiderman200700 زحمت کشیدن و توی یه تاپیک این برنامه رو گذاشتن اما دو جا مشکل داره که به فارسی جلوش نوشتم ، لطفا دوستان بررسی کنند .
package javaclass;
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class PaintPanel extends JPanel {
private int pointCount = 0; // count number of points
// array of 10000 java.awt.Point references
private Point points[] = new Point[10000];
// set up GUI and register mouse event handler
public PaintPanel() { // اینجا معلوم نیست چه ورودی داره
// handle frame mouse motion event
addMouseMotionListener(
new MouseMotionAdapter() { // anonymous inner class {
// store drag coordinates and repaint
public void mouseDragged(MouseEvent event) {
if (pointCount < points.length) {
points[ pointCount] = event.getPoint(); // find point
pointCount++; // increment number of points in array
repaint(); // repaint JFrame
} // end if
} // end method mouseDragged
} // end anonymous inner class
); // end call to addMouseMotionListener
} // end PaintPanel constructor
// draw oval in a 4-by-4 bounding box at specified location on window
public void paintComponent(Graphics g) { // اینجا هم میگه تعریف شده نیست
super.paintComponent(g); // clears drawing area
// draw all points in array
for (int i = 0; i < pointCount; i++) {
g.fillOval(points[ i].x, points[ i].y, 20, 20);
}
} // end method paintComponent
public static void main(String args[]) {
// create JFrame
JFrame application = new JFrame("A simple paint program");
PaintPanel paintPanel = new PaintPanel(); // create paint panel
application.add(paintPanel, BorderLayout.CENTER); // in center
// create a label and place it in SOUTH of BorderLayout
application.add(new JLabel("Drag the mouse to draw"),
BorderLayout.SOUTH);
application.setDefaultCloseOperation(JFrame.EXIT_O N_CLOSE);
application.setSize(400, 200); // set frame size
application.setVisible(true); // display frame
} // end main
} // end class PaintPanel
spiderman200700
یک شنبه 26 خرداد 1392, 14:15 عصر
چک کردم مشکلی نداره.
شما همه کد ها رو دقیقا کپی کن. فقط به جای ای قسمت :package javaclass; پکیج خودتو بنویس. اگرم فایلهات توی هیچ پکیجی نیست اصلا اون قسمتو ننویس.
اجرا میشه مشکل نداره
teymoorei
یک شنبه 26 خرداد 1392, 15:17 عصر
سلام
بررسی کردم درسته اما بازم مشکل داره ، لطفا تصاویر زیر رو ببینید .
http://upload.tehran98.com/img1/ufq48ez00v7u2d4kch9.png
http://upload.tehran98.com/img1/dlshiytaf5gceyoaw9t2.png
spiderman200700
یک شنبه 26 خرداد 1392, 19:53 عصر
کلاس PaintPanel باید توی فایلی به نام PaintPanel.java باشه. نه چیز دیگه ای.
یا اینکه کلمه Public رو از جلوی class بردار.
teymoorei
یک شنبه 26 خرداد 1392, 21:45 عصر
سلام
ممنونم از توجه تون درست شد ، اما من می خوام روی فرمی که خودم قبلا درست کردم و روی یک عکسی که قبلا به jlable دادم اعمال بشه .
لطفا راهنمایی کنید .
باتشکر
spiderman200700
دوشنبه 27 خرداد 1392, 01:17 صبح
این یه مثال بود دیگه.
شما میتونی همراه این خطوط عکس یا هر چیز دیگه ای رسم کنی.
در کل روی هر کامپوننتی که میخوای خطوط یا تصویری رسم کنی،باید کلاست از اون کامپوننت مشتق بشه و متد paint یا paintComponent رو پیاده سازی کنه.
با یه سرچ مطالب زیادی گیرت میاد.حتی توی همین انجمن
teymoorei
دوشنبه 27 خرداد 1392, 08:52 صبح
فقط اگه ممکنه به من بگید چطور باید روی فرمی که ازقبلا طراحی کردم از این کلاس استفاده کنم .
teymoorei
دوشنبه 27 خرداد 1392, 22:47 عصر
لطفا راهنمایی کنید
spiderman200700
سه شنبه 28 خرداد 1392, 00:25 صبح
کافیه متد main رو از توی کلاس PaintPanel حذف کنی ، بعدش از PaintPanel یه Object بسازی و به فرم مورد نظر ادد کنی. همین :لبخندساده:
teymoorei
سه شنبه 28 خرداد 1392, 01:06 صبح
متد main رو حذف کردم و توی فرم خودم کد زیر رو اضاف کردم اما بازم کار نکرد :ناراحت: .
private void formWindowActivated(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
PaintPanel paintPanel = new PaintPanel(); // create paint panel
this.add(paintPanel, BorderLayout.CENTER);
}
spiderman200700
سه شنبه 28 خرداد 1392, 11:09 صبح
اون دو خط کدی رو که نوشتی توی کانسترکتور کلاست قرار بده.
البته اگه داری از JFrameForm (ابزار های گرافیکی نتبینز) استفاده میکنی، یه کم فرق داره.
ولی در کل باید این دو خط کد رو توی کانسترکتور بنویسی قبل از اینکه فرم pack بشه. البته بهتره یه Size هم برای PaintPanel ست کنی.
teymoorei
سه شنبه 28 خرداد 1392, 14:17 عصر
سلام
من از jframe گرافیکی نتبینز استفاده می کنم .
ضمنا منظور از کانسترکتور رو هم متوجه نمیشم .
اگه ممکنه یه را هنمایی جامع تر بکنید .
spiderman200700
سه شنبه 28 خرداد 1392, 19:23 عصر
عذر میخوام جامع تر از این نمیشه توضیح داد.
ظاهرا شما از ریشه با برنامه نویسی مشکل داری. به نظرم باید اول خوب مفاهیم رو یاد بگیری، بعد سراغ اینجور کارا بری.
جامع تر از این میشه نوشتن کد.
کانسترکتور هم متد سازنده کلاس هست.
موفق باشی :چشمک:
teymoorei
سه شنبه 28 خرداد 1392, 21:28 عصر
کپی کردم نشد .
توی JFrameForm دارم کارمی کنم .
لطفا JFrameForm راهنمایی کنید .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.