fleagk Δημοσ. 27 Ιουνίου 2009 Δημοσ. 27 Ιουνίου 2009 γεια σας παιδια. εχω κολλησει σε ενα project που πρεπει να γραψω σε java. αυτο που θελω να κανω ειναι ενα map ενος κτηριου και καθε φορα που καποιος κανει hover το ποντικι πανω απο καποια συγκεκριμενη περιοχη να του εμφανιζει textbox με πληροφοριες. με λιγα λογια αν πχ εχει το ποντικι πανω απο την καφετερια του κτηριου να εμφανιζεται textbox που λεει "καφετερια".μολις μετακινει το ποντικι εξω απο αυτη την περιοχη να εξαφανιζεται το μυνημα.αν βοηθαει ο αντιστοιχος κωδικας σε html <area shape="poly" coords="444,37,465,38,467,61,446,61" alt="Coffee Room" title="Coffee Room"> καθε προταση θα εκτιμηθει. Ευχαριστω.
virxen75 Δημοσ. 27 Ιουνίου 2009 Δημοσ. 27 Ιουνίου 2009 θα το φτιάξεις με γραφικά υποθέτω έτσι? φτιάξε μία κλάση που θα έχει ιδιότητες 1) ένα πολύγωνο που θα περικλείει αυτό που θες π.χ. την καφετέρια 2) μία ένδειξη που θα είναι αυτό που θα σου εμφανίζει π.χ. καφετέρια στην κεντρική κλάση φτιάξε ένα global arraylist με αντικείμενα της πιο πάνω κλάσης θα το γεμίσεις με τα σωστά δεδομένα(τα έχεις από τον σχεδιασμό) θα κάνεις χρήση της public void mouseMoved(MouseEvent e){ X=e.getX(); Y=e.getY(); ........ } .......εδώ θα διατρέχεις όλo το arraylist και θα ελέγχεις αν το X,Y σημείο ανήκει σε κάποιο από τα πολύγωνα.Αν βρει κάποιο εμφανίζει την ένδειξη στην θέση του mouse (drawstring(....)) ελπίζω να βοήθησα. αν κολλήσεις κάπου στείλε τον κώδικα σου.
fleagk Δημοσ. 27 Ιουνίου 2009 Μέλος Δημοσ. 27 Ιουνίου 2009 virxen75 ευχαριστω πολυ για την βοηθεια σου. καποια στιγμη σημερα θα ασχοληθω και θα σε ενημερωσω. ---------- Το μήνυμα προστέθηκε στις 21:59 ---------- καλησπέρα.λοιπον εχω κολλησει παρα πολυ.πραγματικα δεν ξερω πως να συνεχισω.εφτιαξα την κλαση οπως ειπες.αλλα απο κει και περα δυσκολευομαι. public class Xarths_Κτηριου extends JApplet implements MouseListener { class map{ Rectangle rec; String label; public void setname(String des){ label = des; } public String getname(){ return label; } public void setrec(Rectangle re){ rec = re; } } int X, Y; ArrayList tritos = new ArrayList(); map g17 = new map(); //φτιαχνω ενα αντικειμενο map //kano draw oti xreiazetai eikones klp g17.setname("Καφετερια"); //γεμιζω την κλαση Rectangle pl2 = new Rectangle(1169, 77, 39, 60); //οριζω τετραγωνο g17.setrec(pl2); //τσεκαρα οτι οι τιμες μπαινουν κανονικα στην κλαση απο δω και περα ομως δεν χερω πως να συνεχισω.αν θελεις εξηγησε μου λιγο παραπανω για το global array και τους listeners που ανεφερες πως να τους χρησιμοποιησω κλπ. ευχαριστω πολυ!!
macabre_sunsets Δημοσ. 27 Ιουνίου 2009 Δημοσ. 27 Ιουνίου 2009 Θα σε βόλευε μια λύση τύπου tooltip? Με jQuery μπορεί να γίνει πολύ εύκολα. Του λες πχ για κάθε <area shape...> να εμφανίζει ένα tooltip με το καθορισμένο "title" που περικλείει, εφόσον από ότι βλέπω το έχεις ορίσει έτσι κι αλλιώς.
fleagk Δημοσ. 27 Ιουνίου 2009 Μέλος Δημοσ. 27 Ιουνίου 2009 το ψαχνω και επανερχομαι. thanks ---------- Το μήνυμα προστέθηκε στις 22:28 ---------- εξηγησε μου αν σου ειναι ευκολο τι ακριβως ειναι αυτο. το εψαξα λιγο αλλα δεν εβγαλα ακρη.
virxen75 Δημοσ. 28 Ιουνίου 2009 Δημοσ. 28 Ιουνίου 2009 παράδειγμα για να καταλάβεις τι ακριβώς εννοώ. > import java.awt.*; import javax.swing.*; import java.util.ArrayList; import java.awt.event.*; import java.awt.Polygon; import javax.swing.*; import java.awt.geom.*; import javax.swing.event.*; public class Design2D extends JFrame implements MouseMotionListener{ private Display drawingArea; class map{ private Polygon pol1; private String label; public void setName(String des){ this.label = des; } public String getName(){ return this.label; } public void setPolygon(Polygon pol){ this.pol1 = pol; } public Polygon getPolygon(){ return this.pol1; } } private ArrayList<map> wholeMap; public Design2D(){ wholeMap=new ArrayList<map>(); drawingArea = new Display(); // Create the drawing surface. drawingArea.setBackground(Color.white); drawingArea.setFocusable(true); drawingArea.setPreferredSize(new Dimension(600,400)); drawingArea.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); drawingArea.addMouseMotionListener(this); JPanel jp2=new JPanel(); jp2.setLayout(new GridLayout(1,1)); jp2.setPreferredSize(new Dimension(600,400)); jp2.add(drawingArea); add(jp2); setVisible(true); setSize(650,450); setLocationRelativeTo(null); // Center window. setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); createMap(); } public void mouseDragged(MouseEvent e){ } public void mouseMoved(MouseEvent e){ Point p1=e.getPoint(); Polygon pol1=new Polygon(); for (int i=0;i<wholeMap.size();i++){ pol1=wholeMap.get(i).getPolygon(); if (pol1.contains(p1)){ System.out.println("\nmouse entered inside-->"+wholeMap.get(i).getName()); } } } private void createMap(){ map place1=new map(); place1.setName("cafe"); Polygon pol1=new Polygon(); pol1.addPoint(10,10); pol1.addPoint(50,10); pol1.addPoint(50,60); pol1.addPoint(10,10); place1.setPolygon(pol1); wholeMap.add(place1); map place2=new map(); place2.setName("toilet"); Polygon pol2=new Polygon(); pol2.addPoint(100,100); pol2.addPoint(150,110); pol2.addPoint(150,160); pol2.addPoint(100,100); place2.setPolygon(pol2); wholeMap.add(place2); repaint(); } class Display extends JPanel{ public void paintComponent(Graphics g) { super.paintComponent(g); Color c; Graphics2D g2=(Graphics2D)g; g2.setColor(Color.RED); for (int i=0;i<wholeMap.size();i++){ g2.drawPolygon(wholeMap.get(i).getPolygon()); } } } //end class public static void main(String []args){ new Design2D(); } }
macabre_sunsets Δημοσ. 28 Ιουνίου 2009 Δημοσ. 28 Ιουνίου 2009 Για ρίξε μια ματιά σε αυτό το demo : http://jquery.bassistance.de/tooltip/demo/ Βασικά δεν έχω καταλάβει αμα το κάνεις εξολοκλήρου με aplet ή απλά περνάς ότι σημείο θέλεις με html (<area...>). Αμα το κάνεις με applet νομίζω είμαι τελείως άκυρος :/
fleagk Δημοσ. 28 Ιουνίου 2009 Μέλος Δημοσ. 28 Ιουνίου 2009 macabre το θελω σε applet οποτε μαλλον δεν μπορω να χρησιμοποιησω αυτο που λες. το κοιταξα λιγο κ εγω. ευχαριστω. virxen75 ευχαριστω που ασχοληθηκες. σου χρωσταω χαρη. θα κοιταξω τον κωδικα σου αυριο. θα εχεισ νεα μου. καληνυχταααααααααα...
fleagk Δημοσ. 28 Ιουνίου 2009 Μέλος Δημοσ. 28 Ιουνίου 2009 φιλε virxen75 ευχαριστω για την βοηθεια. εχω μια τελευταια ερωτηση(ΕΛΠΙΖΩ!!!) στην προηγουμενη υλοποιηση εμφανιζα τισ εικονες του κτηριου με g.drawimage(). τωρα οταν παω να κανω το ιδιο πραγμα δεν εμφανιζει τις εικονες. καμια ιδεα πως διορθωνεται αυτο? και κατι ακομα.αυτο που θελω να κανω ειναι να μου εμφανιζει σαν tooltip (στο σημειο που βρισκετε το ποντικι) το αποθηκευμενο string του καθε πολυγωνου .οχι στο system output.αυτο πως μπορει να υλοποιηθει?
virxen75 Δημοσ. 29 Ιουνίου 2009 Δημοσ. 29 Ιουνίου 2009 δες το έτοιμο όπως το θες > import java.awt.*; import javax.swing.*; import java.util.ArrayList; import java.awt.event.*; import java.awt.Polygon; import javax.swing.*; import java.awt.geom.*; import javax.swing.event.*; import javax.imageio.*; import java.awt.image.*; import java.io.*; public class Design2D extends JFrame implements MouseMotionListener{ private Display drawingArea; class map{ private Polygon pol1; private String label; private String imageName; private int imageX,imageY,imageWidth,imageHeight; public void setImage(String name,int x,int y,int width,int height){ this.imageName=name; this.imageX=x; this.imageY=y; this.imageWidth=width; this.imageHeight=height; } public BufferedImage getImage(){ try { BufferedImage img = ImageIO.read(new File(imageName)); return img; } catch (IOException e) { return null; } } public int getImageX(){ return imageX; } public int getImageY(){ return imageY; } public int getImageHeight(){ return imageHeight; } public int getImageWidth(){ return imageWidth; } public void setName(String des){ this.label = des; } public String getName(){ return this.label; } public void setPolygon(Polygon pol){ this.pol1 = pol; } public Polygon getPolygon(){ return this.pol1; } } private ArrayList<map> wholeMap; private map SelectedBuilding; private int MouseX,MouseY; public Design2D(){ SelectedBuilding=null; wholeMap=new ArrayList<map>(); drawingArea = new Display(); // Create the drawing surface. drawingArea.setBackground(Color.white); drawingArea.setFocusable(true); drawingArea.setPreferredSize(new Dimension(600,400)); drawingArea.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); drawingArea.addMouseMotionListener(this); JPanel jp2=new JPanel(); jp2.setLayout(new GridLayout(1,1)); jp2.setPreferredSize(new Dimension(600,400)); jp2.add(drawingArea); add(jp2); setVisible(true); setSize(650,450); setLocationRelativeTo(null); // Center window. setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); createMap(); } public void mouseDragged(MouseEvent e){ } public void mouseMoved(MouseEvent e){ SelectedBuilding=null; repaint(); Point p1=e.getPoint(); Polygon pol1=new Polygon(); for (int i=0;i<wholeMap.size();i++){ pol1=wholeMap.get(i).getPolygon(); if (pol1.contains(p1)){ SelectedBuilding=wholeMap.get(i); MouseX=e.getX(); MouseY=e.getY(); repaint(); } } } private void createMap(){ map place1=new map(); place1.setName("cafe"); Polygon pol1=new Polygon(); pol1.addPoint(10,10); pol1.addPoint(50,10); pol1.addPoint(50,60); pol1.addPoint(10,60); pol1.addPoint(10,10); place1.setPolygon(pol1); place1.setImage("cafe.jpg",10,10,40,50); wholeMap.add(place1); map place2=new map(); place2.setName("toilet"); Polygon pol2=new Polygon(); pol2.addPoint(100,100); pol2.addPoint(150,100); pol2.addPoint(150,160); pol2.addPoint(100,160); pol2.addPoint(100,100); place2.setImage("toilet.jpg",100,100,50,60); place2.setPolygon(pol2); wholeMap.add(place2); repaint(); } class Display extends JPanel{ public void paintComponent(Graphics g) { super.paintComponent(g); Color c; Graphics2D g2=(Graphics2D)g; for (int i=0;i<wholeMap.size();i++){ map tempMap=wholeMap.get(i); g2.drawImage(tempMap.getImage(),tempMap.getImageX(),tempMap.getImageY(),tempMap.getImageWidth(),tempMap.getImageHeight(),null); if (tempMap==SelectedBuilding){ g2.setColor(Color.RED); g2.drawString(tempMap.getName(),MouseX,MouseY); }else g2.setColor(Color.GREEN); g2.drawPolygon(tempMap.getPolygon()); } } } //end class public static void main(String []args){ new Design2D(); } } βάλε στον ίδιο κατάλογο και τις εικόνες που σου στέλνω
fleagk Δημοσ. 29 Ιουνίου 2009 Μέλος Δημοσ. 29 Ιουνίου 2009 φιλε μου σε ευχαριστω παρα πολυ πραγματικα.βοηθησες απιστευτα. ---------- Το μήνυμα προστέθηκε στις 03:54 ---------- παντως αυτο που διαπιστωσα ειναι οτι θα επρεπε να υπηρχε καποιο Jcomponent το οποιο να μην επηρεαζει την εμφανιση του applet. θα ηταν πολυ πιο ευκολη ολη αυτη η υλοποιηση λογω των συναρτησεων settooltip κλπ. ευχαριστω κ παλι virxen ---------- Το μήνυμα προστέθηκε στις 09:07 ---------- τελειωσα το προτζεκτ και προσπαθω να το κανω embed σε ενα html αρχειο ωστε να τρεξει σαν java !!APPLET!!(ισως και να προσπαθω να το υλοποιησω τελειως λαθος εχω την εντυπωση οτι καπου στο html αρχειο πρεπει να υπαρχει <APPLET ...code...> ..... </APPLET> αλλα δεν εβγαλα ακρη). χρησιμοποιω τον παρακατω κωδικα. ><html> <head> </head> <body bgcolor="000000"> <center> <EMBED type='application/x-java-applet;version=1.3.1' width='1680' height='1050' align='baseline' code='Design2D_.java'> </EMBED> </center> </body> </html> οπου Design2D_ το ονομα του αρχειου .java. δυστυχως μου εμφανιζει προβλημα οταν ανοιγω το hmtl. αρχικα ανοιγει η σελιδα στον browser αλλα εμφανιζει σφαλμα (error:click for details). το log υπαρχει πιο κατω.μετα απο 1-2 δευτερολεπτα ανοιγει καινουριο παραθυρο(προφανως εκει θα επρεπε να τρεχει το προγραμματακι που γραψαμε) αλλα αυτο που εμφανιζει δεν ειναι ολοκληρωμενο.ενω εμφανιζονται καποια μυνηματα που τυπωνω με g.drawstring() σωστα, δεν εμφανιζει καθολου εικονες ουτε λειτουργει το mouse-over (δεν εμφανιζεται κανενα ονομα απο κανενα μερος του κτηριου.) ενω οταν το τρεχω με το Jcreator δουλευει μια χαρα και δεν υπαρχει κανενα λαθος στον compiler.κανω μαλλον κατι λαθος με το embed. καποια ιδεα??? (σορυ αν σε κουρασα) >java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkExit(Unknown Source) at javax.swing.JFrame.setDefaultCloseOperation(Unknown Source) at Design2D_.<init>(Design2D_.java:69) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Exception: java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0)
virxen75 Δημοσ. 29 Ιουνίου 2009 Δημοσ. 29 Ιουνίου 2009 για να εκτελεστεί σαν applet ο κώδικας θέλει κάποιες αλλαγές 3-4 αν θυμάμαι καλά δες αυτό που σου στέλνω έχει και html παράδειγμα κλήσης final.zip
fleagk Δημοσ. 29 Ιουνίου 2009 Μέλος Δημοσ. 29 Ιουνίου 2009 δεν εχω καταφερει να το τρεξω σαν applet.ουτε το δικο σου ουτε το δικο μου με τις αντιστοιχες αλλαγες.για να τρεξει σαν applet πρεπει να υπαρχει μεσα στο προγραμμα μια void init(){} και να ειναι η κυρια κλαση extended JApplet..δυστυχως δεν ξερω πιο μπορει να ειναι το κολλημα.αλλα καθε φορα που ανοιγω το html αρχειο αναλογα με τι αλλαγες εχω κανει στο προγραμμα η δεν εμφανιζει τιποτα και μου λεει οτι το applet failed to start η εμφανιζει μονο οτι ζωγραφιζω με g.drawstring (τιτλους κλπ).εχεις καμια ιδεα?Μια υλοποιηση που ειδα στο internet ειναι η δημιουργια καινουριου αρχειου .java που περιεχει την Init και ειναι extend JApplet και εκει μεσα καλεις την main class σου με καποιο τροπο.
virxen75 Δημοσ. 1 Ιουλίου 2009 Δημοσ. 1 Ιουλίου 2009 έκανα κάποιες αλλαγές για δες το τώρα final2.zip
fleagk Δημοσ. 3 Ιουλίου 2009 Μέλος Δημοσ. 3 Ιουλίου 2009 το παρεδωσα την παρασκευη.ευχαριστω για την βοηθεια virxen το αλλαξα μονος μου.βρηκα καποια πραγματακια για το java applet στο internet. αν θελεις πες μου να σου δωσω λεπτομεριες.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.