פורסם 2007 ביולי 1518 שנים הי כולם.אני מנסה לנסות לצייר כל מני דברים ב- Java. חשבתי על להתחיל עם קווים פשוטים קודם, אבל גם עם זה אני נתקל בבעיות.כל ה- Java שאני יודע זה משנת לימודים אחת בבצפר (2 יחידות) אז אני לא יודע הרבה, רק את הבסיס.בכל מקרה, התחלתי לחפש כל מני ספריות שתומכות בגרפיקה, מצאתי את שני אלו http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Graphics.htmlhttp://java.sun.com/j2se/1.5.0/docs/api/java/awt/geom/package-summary.htmlמביניהם נראה לי ש Graphics תתאים לי יותר מ- Geometry מכיוון שב- Geometry לא נראה שממש אפשר לצייר את הקווים.הבעיה היא שאני לא מבין איך להשתמש בספריה Graphics.אני לא רואה ממש איזה Constructor שאני יכול להתמש בו ולכן אני לא יכול להתחיל להשתמש בפקודות שלה.אשמח עם תוכלו להסביר לי איך אני יכול לקבל גישה לפעולות של הספריה Graphics.תודה!
פורסם 2007 ביולי 1518 שנים קודם כל, צריך להיות לך JPANEL(תשתמש בSWING). תדרוס לJPANEL הזה את המתודה paint. המתודה הזו מקבלת משתנה מסוג Graphics שבעזרתו אתה יכול לצייר.class MyPanel extends JPanel{...public void paint(Graphics g){g.drawLine(...)}...}
פורסם 2007 ביולי 1618 שנים מחבר קודם כל תודה רבה! עכשיו אני קצת מתחיל להבין את זה, אבל יש רק עוד בעיה אחת.איזה מן עצם זה Graphics? איך אני יוצר אותו?זה למשל מה שניסיתי לעשות בתוכנית הראשיתmypanel p=new mypanel(); Graphics g; g.create(3, 5, 20, 30); p.paint(g);וזה mypanelpublic class mypanel extends JPanel{public void paint (Graphics g){ g.drawLine(1, 2, 3, 3);}}כמובן ש import javax.swing.JPanel;import java.awt.Graphics;נמצאים בשניהם.הוא כותב לי עכשיו the local variable g may not have been initialized.השאלה היא איך אני יוצר עצם מסוג Graphics או משתמש בעצם מסוג Graphics.סליחה על השאלות הנוביות ותודה על העזרה!
פורסם 2007 ביולי 1618 שנים זה בכלל יוצר לך חלון כלשהו?נראה לי שלפני JPanel אתה חייב שיהיה לך JFrameאתה מסתכל על API ישן אגב.. הנה המעודכן:http://java.sun.com/j2se/1.5.0/docs/api/לצורך ציור קווים חופשי אתה יכול להתסכל על Canvas:http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Canvas.htmlהנה קובץ לדוגמא:/* * HelloWorldSwing.java is a 1.4 example that * requires no other files. */import javax.swing.*;import java.awt.*;import java.awt.event.*; //for eventspublic class CanvasGUI { public static void main(String[] args) { //Make sure we have nice window decorations. JFrame.setDefaultLookAndFeelDecorated(true); //Create and set up the window. JFrame frame = new JFrame("HelloWorldSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //creating the buttons panel JPanel panel1 = new JPanel(new FlowLayout()); panel1.add(new JButton("JButton")); panel1.add(new JButton("JButton")); JPanel canvas = new Canvas(); //adding a panel and a label JPanel panel2 = new JPanel(new BorderLayout()); panel2.add(panel1,BorderLayout.NORTH); panel2.add(canvas,BorderLayout.CENTER); //set window to feet componants frame.add(panel2); frame.setSize(200,200); frame.setVisible(true); canvas.setBorder(BorderFactory.createTitledBorder("canvas")); Canvas._gr = canvas.getGraphics(); }}@SuppressWarnings("serial")class Canvas extends JPanel{ static Graphics _gr; public Canvas(){ setSize(200,200); addMouseMotionListener(new MouseMotionListner1()); }}class MouseMotionListner1 extends MouseMotionAdapter{ public void mouseDragged(MouseEvent e){ int x= e.getX(), y=e.getY(); Canvas._gr.drawLine(x,y,x,y); }}
פורסם 2007 ביולי 1618 שנים אתה צריך לקרוא פשוט לREPAINT, לא לPAINT.אתה צריך לעשותmypanel.repaint();המערכת כבר תדאג לצייר את הצורות שלך שיהייה לה זמן. היא אפילו תדאג לשלוח לך GRAPHICS לPAINT.
פורסם 2007 ביולי 1618 שנים מחבר Buffer תודה רבה על הקוד, אבל אני לא מחפש חלון שאפשר לצייר בו. אני מחפש פשוט חלון שהמחשב יצייר בו דברים לפי נתונים. UnsignedInteger, נראה לי ששחכתם שאני Noob לפי מה שאמרת זה מה שצריך להיות לי בתוכנית הראשית (בעצם במצב כזה אין לי תת-תוכנית של מחלקה ושום תת תוכנית אחרת כי אני לא צריך לעשות OverRiding לשום פעולה. לכן אני יכול פשוט להשתמש לפי מה שאמרת ב- repaint() של JPanel. import java.awt.Graphics;import java.awt.Graphics2D;import javax.swing.JFrame;import javax.swing.JPanel;public class test { /** * @param args */ public static void main(String[] args) { JPanel p=new JPanel(); JFrame frame=new JFrame("Hi"); p.repaint(3, 5, 10, 20); }} import java.awt.geom.*; זה לא מצייר לי כלום.
פורסם 2007 ביולי 1618 שנים לREPAINT לא שולחים פרמטרים.ואתה חייב לדרוס את PAINT ובתוך PAINT להגיד לו מה לצייר(קווים, עיגולים וכו).נניח שמה שעשית זה בסדר(וזה לא). איפה אתה אומר לו לצייר קו?מדוגמא הכי פשוט ללמוד:import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Draw extends JFrame{ public Draw(){ super("drawing demo"); setSize(330,330); setVisible(true); } public void paint(Graphics g){ for(int i=0; i<25; i++){ g.setColor(new Color(i*10, 0, i*10)); g.drawRect(10+i*5, 20+i*5, 50+i*5, 50+i*5); } } public static void main(String[] args){ Draw win=new Draw(); win.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); }}
פורסם 2007 ביולי 1618 שנים מחבר חחח חשבתי שמשהו שם לא הגיוני תוכנית ראשית - { mypanel p=new mypanel(); JFrame frame=new JFrame("Hi"); p.repaint();public static void main(String[] args) mypanel{ public void paint(Graphics g) { g.drawLine(1, 2, 6, 4); }}public class mypanel extends JPanelלמה הוא לא עושה כלום עכשיו?
פורסם 2007 ביולי 1618 שנים אתה צריך להוסיף את הPANEL שלך לFRAME.frame.getContentpane().add(p, BorderLayout.Center);יכול להיות שהתבלבלתי בשמות של הפונקציות, אך העיקרון הוא החשוב.
פורסם 2007 ביולי 1618 שנים מחבר השורה שלך קצת התבלבלה בגלל הימין-שמאל פה.בכל מקרה ניסיתי להבין מה כתבת שם אבל לא עבד לי ה- (p, BorderLayout.Center)אז השארתי רק את ה- p בפנים. יצא לי ככה ועדיין הוא לא עושה כלום. { mypanel p=new mypanel(); JFrame frame=new JFrame("Hi"); frame.getContentPane().add(p); p.repaint();public static void main(String[] args) תודה!
פורסם 2007 ביולי 1618 שנים מחבר עובד, תודה רבה! אפילו בלי p.repaint(); מה השורה Pack עושה? אני רואה שהיא פותחת קצת את החלון בשבילי. בשביל מה? יש לה עוד תפקיד? למה אני לא צריך את Repaint()?
פורסם 2007 ביולי 1618 שנים repaint אמור לעדכן את הפאנל או משהו כזה..Pack מכין את ה- Frame לתצוגה על המסך.אף פעם לא יצא לי להשתמש ב-repaint אז אני לא ממש יודע
פורסם 2007 ביולי 1618 שנים REPAINT אומר לJVM לצייר מחדש את הFRAME כמה שיותר מהר. בחלק מהמערכת הJVM לא מצייר את החלון כל פעם מחדש כדי לא להכביד על המחשב. הרעיון הוא להגיד לJVM מתי אתה רוצה שהוא יצייר מחדש את החלון.אצלי למשל, החלון מצייר את עצמו מחדש כאשר מגדילים או מקטינים את החלון. בכל שאר הפעמים זה יכול ליצור בעיות.אם אתה נתקע בבעיות שאתה שם לב שדברים לא פועלים כפי שהם צריכים לפעול, תנסה לדחוף במקום כלשהו REPAINT. זה צריך לפתור את הבעיה.תנסה ליצור כפתור שמצייר משהו לPANEL.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.