לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 04-05-2008, 02:45
  WolfsCaptain WolfsCaptain אינו מחובר  
 
חבר מתאריך: 30.01.07
הודעות: 261
Graphics בג'אווה

ניסיתי להכין קוד כזה, שברגע שאתה לוחץ איפה שהוא, תיווצר נקודה שחורה, והתוצאה היא, שלא קורה כלום :/
בכל מקרה, לא ממש הבנתי איך משתמשים בGraphics.

הנה הקוד:

קוד:
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class wulf extends JApplet implements MouseListener { public static int x = 1; public static int y = 1; public static int width = 10; private final static JFrame frame = new JFrame("Paint"); public static Graphics gr; public void init() { frame.addMouseListener(this); } public void paint(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, getSize().width - 1, getSize().height - 1); g.setColor(Color.black); g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); frame.pack(); frame.setVisible(true); gr = frame.getGraphics(); // not sure how I am supposed to do this part } public void mousePressed(MouseEvent event) { x = event.getX(); y = event.getY(); gr.setColor(Color.black); gr.fillOval(x, y, width, width); } public void mouseClicked(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {}


תודה מראש למי שיעזור.
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 04-05-2008, 08:44
צלמית המשתמש של petia
  משתמש זכר petia petia אינו מחובר  
 
חבר מתאריך: 22.03.05
הודעות: 4,275
שלח הודעה דרך ICQ אל petia שלח הודעה דרך MSN אל petia Facebook profile
בתגובה להודעה מספר 1 שנכתבה על ידי WolfsCaptain שמתחילה ב "Graphics בג'אווה"

קודם כל אני חייב לציין נקודות חשובות:
חשוב לדעת את קונבנציית ג'אווה! כותבים את שם במחלקה עם אות ראשונה גדולה!
גם את ה-attributes שמור כprivate אבל במקרה שלך נעזוב.

אני אישית לא סובל לעבוד עם Japplet ותמיד נוהג לעבוד עם Jframe - מגדירים בתוך בנאי ומפעילים על ידי מתודת main על ידי יצירת האובייקט.

אני רואה שיש לך בעיה עם משימוש עם Japplet ועם Jframe שאלה שתי שיטות שונות לעבודה עם גרפיקה, תינעל על שיטה אחת ותעבור לפיה.

הנה הפתרון לבעיה, תשים לב מה הורדתי ומה הוספתי:





קוד:
import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JApplet; public class Wulf extends JApplet implements MouseListener { private Point pClickedPoing = null; private int width = 10; public void init() { addMouseListener(this); } public void paint(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, getSize().width - 1, getSize().height - 1); g.setColor(Color.black); g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); if(pClickedPoing != null) { g.fillOval(pClickedPoing.x,pClickedPoing.y, width, width); } } public void mousePressed(MouseEvent event) { pClickedPoing = event.getPoint(); //ew Point(event.getY(), event.getX()); repaint(); } public void mouseClicked(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {} }





_____________________________________
בברכה,
אדי.
The world from my eyes

רכשת ציוד צילום ורוצה לשתף אותנו בחווית הקנייה? לחץ כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 04-05-2008, 14:20
צלמית המשתמש של petia
  משתמש זכר petia petia אינו מחובר  
 
חבר מתאריך: 22.03.05
הודעות: 4,275
שלח הודעה דרך ICQ אל petia שלח הודעה דרך MSN אל petia Facebook profile
בתגובה להודעה מספר 3 שנכתבה על ידי WolfsCaptain שמתחילה ב "תודה על הקוד, זה בערך הסביר..."

לפי מה שכתבת כאשר פתחת את האשכול, ביקשת לצייר נקודה ותו לא.
בכל מקרה זה מצריך לשמור את הנקודות שכבר לחצת בתוך ווקטור (או בכל ייצוג מערך אחר שתבחר) בשביל לצייר אותן מחדש.
אני לא רואה חסרון בשימוש בPoint, בשבילי נוח יותר לעבוד איתו וגם אפשר להשתמש במתודות מוכנות הקיימות בו.

הנה מה שרצית:

קוד:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;
import javax.swing.JApplet;
publicclass Wulf extends JApplet implements MouseListener { private Vector<Point> vVectorOfPoints = new Vector<Point>(); private Point pClickedPoing = null; privateintwidth = 10; publicvoid init() { addMouseListener(this); } publicvoid paint(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, getSize().width - 1, getSize().height - 1); g.setColor(Color.black); g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); if(vVectorOfPoints.size() > 0) { for(int i = 0 ; i < vVectorOfPoints.size() ; i++) { pClickedPoing = vVectorOfPoints.get(i); g.fillOval(pClickedPoing.x,pClickedPoing.y, width, width); } } } publicvoid mousePressed(MouseEvent event) { vVectorOfPoints.add(event.getPoint()); repaint(); } publicvoid mouseClicked(MouseEvent event) {} publicvoid mouseReleased(MouseEvent event) {} publicvoid mouseEntered(MouseEvent event) {} publicvoid mouseExited(MouseEvent event) {} }


עריכה: למה בכלל אתה רוצה לשים JFrame בתוך JApplet?
_____________________________________
בברכה,
אדי.
The world from my eyes

רכשת ציוד צילום ורוצה לשתף אותנו בחווית הקנייה? לחץ כאן!


נערך לאחרונה ע"י petia בתאריך 04-05-2008 בשעה 14:32.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 05-05-2008, 21:28
צלמית המשתמש של petia
  משתמש זכר petia petia אינו מחובר  
 
חבר מתאריך: 22.03.05
הודעות: 4,275
שלח הודעה דרך ICQ אל petia שלח הודעה דרך MSN אל petia Facebook profile
בתגובה להודעה מספר 9 שנכתבה על ידי WolfsCaptain שמתחילה ב "אז אין איזה שהיא דרך לצייר..."

בעיקרון זה לא מסובך וזה מאוד הגיוני.
אגב, הכל מצוייר מחדש רק כאשר אתה עושה repaint או שהrepaint נקרא על ידי התוכנית עצמה.
זה כלל לא מכביד (לפחות לא מנסיוני) ואם כבר ציינת צבעים, יש לך JColorChooser מוכן לשימוש :http://java.sun.com/docs/books/tuto...lorchooser.html
http://www.apl.jhu.edu/~hall/java/S...lorChooser.html

חציצה כפולה / double buffering - מיועד לשיפור ביצועי ההנפשה. זה מעין יצירת תמונה בגודל הקנווס שיש לך - הכל מצוייר על התמונה הזו ולאחר מכן פשוט מדביקים על הקנווס.
http://java.sun.com/docs/books/tuto.../doublebuf.html
http://koala.ilog.fr/jml/java/trick...-buffering.html
http://www.codeproject.com/KB/java/...ublebuffer.aspx
הכל נמצא בגוגל

אני מציע לך לעשות חיפוש בגוגל ל swing ותמצא הרבה מדריכים יעילים בשימוש בגרפיקה.
_____________________________________
בברכה,
אדי.
The world from my eyes

רכשת ציוד צילום ורוצה לשתף אותנו בחווית הקנייה? לחץ כאן!


נערך לאחרונה ע"י petia בתאריך 05-05-2008 בשעה 21:37.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 05-05-2008, 22:25
צלמית המשתמש של petia
  משתמש זכר petia petia אינו מחובר  
 
חבר מתאריך: 22.03.05
הודעות: 4,275
שלח הודעה דרך ICQ אל petia שלח הודעה דרך MSN אל petia Facebook profile
בתגובה להודעה מספר 11 שנכתבה על ידי WolfsCaptain שמתחילה ב "[QUOTE=petia] אגב, הכל מצוייר..."

זכור שג'אווה עובדת לפי פרדיגמת מונחי עצמים ולכן אם תעבוד לפי זה, זה יקל על עבודתך.
זה אומר שתתחיל קודם להגדיר מחלקה shape שיכולה להיות מופשטת.
תוכל לרשת את המחלקה הזאת וליצור מחלקות חדשות כמו Line, square, circle ולממש אותן.
בכל המתודות שיהיו למחלקה, תהיה גם מחלקת paint(Graphics g) (הנה בא עקרון הפולימורפיזם).
כאשר תיצור אובייקטים ממחלקות אלה, תוכל להגדיק מערך דינאמי למשל ווקטור (לא ממש אכפת לך הגודל כי הוא עובד בצורה דינאמית ויעילה) שיכיל אובייקטים מטיפוס <shape> וכאשר תעבור על הווקטור, מספיק שתעשה
קוד:
for(int i = 0 ; i < vectorOfShapes.size() ; i++) { vectorOfShapes.elementAt(i).paint(graphics); }

כל אובייקט יצוייר לפי המתודה שלו על הקנווס.
זה היה על קצה המזלג מה שעליך לעשות אך זה מסביר לך מה אמורה להיות דרך החשיבה.

שוב,תקרא את המסמך שצירפתי על הווקטור, הוא מאוד יעיל ועונה על שאלתך בקשר למערכים.
שמחתי לעזור
_____________________________________
בברכה,
אדי.
The world from my eyes

רכשת ציוד צילום ורוצה לשתף אותנו בחווית הקנייה? לחץ כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 17:57

הדף נוצר ב 0.06 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר