Προς το περιεχόμενο

JAVA Applets και mousehandlers(υποθετω)


fleagk

Προτεινόμενες αναρτήσεις

Δημοσ.

γεια σας παιδια. εχω κολλησει σε ενα 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">

καθε προταση θα εκτιμηθει. Ευχαριστω.

Δημοσ.

θα το φτιάξεις με γραφικά υποθέτω έτσι?

 

φτιάξε μία κλάση που θα έχει ιδιότητες

1) ένα πολύγωνο που θα περικλείει αυτό που θες π.χ. την καφετέρια

2) μία ένδειξη που θα είναι αυτό που θα σου εμφανίζει π.χ. καφετέρια

 

 

στην κεντρική κλάση φτιάξε ένα global arraylist με αντικείμενα της πιο πάνω κλάσης

θα το γεμίσεις με τα σωστά δεδομένα(τα έχεις από τον σχεδιασμό)

θα κάνεις χρήση της

public void mouseMoved(MouseEvent e){

X=e.getX();

Y=e.getY();

........

}

 

.......εδώ θα διατρέχεις όλo το arraylist και θα ελέγχεις αν το X,Y σημείο ανήκει σε κάποιο από τα πολύγωνα.Αν βρει κάποιο εμφανίζει την ένδειξη στην θέση του mouse

(drawstring(....))

 

ελπίζω να βοήθησα.

αν κολλήσεις κάπου στείλε τον κώδικα σου.

Δημοσ.

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 που ανεφερες πως να τους χρησιμοποιησω κλπ. ευχαριστω πολυ!!

Δημοσ.

Θα σε βόλευε μια λύση τύπου tooltip? Με jQuery μπορεί να γίνει πολύ εύκολα.

Του λες πχ για κάθε <area shape...> να εμφανίζει ένα tooltip με το καθορισμένο "title" που περικλείει, εφόσον από ότι βλέπω το έχεις ορίσει έτσι κι αλλιώς.

Δημοσ.

το ψαχνω και επανερχομαι. thanks

 

---------- Το μήνυμα προστέθηκε στις 22:28 ----------

 

εξηγησε μου αν σου ειναι ευκολο τι ακριβως ειναι αυτο. το εψαξα λιγο αλλα δεν εβγαλα ακρη.

Δημοσ.

παράδειγμα για να καταλάβεις τι ακριβώς εννοώ.

 

 

>
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 το θελω σε applet οποτε μαλλον δεν μπορω να χρησιμοποιησω αυτο που λες. το κοιταξα λιγο κ εγω. ευχαριστω.

 

virxen75 ευχαριστω που ασχοληθηκες. σου χρωσταω χαρη. θα κοιταξω τον κωδικα σου αυριο. θα εχεισ νεα μου. καληνυχταααααααααα...

Δημοσ.

φιλε virxen75 ευχαριστω για την βοηθεια. εχω μια τελευταια ερωτηση(ΕΛΠΙΖΩ!!!) στην προηγουμενη υλοποιηση εμφανιζα τισ εικονες του κτηριου με g.drawimage(). τωρα οταν παω να κανω το ιδιο πραγμα δεν εμφανιζει τις εικονες. καμια ιδεα πως διορθωνεται αυτο?

 

και κατι ακομα.αυτο που θελω να κανω ειναι να μου εμφανιζει σαν tooltip (στο σημειο που βρισκετε το ποντικι) το αποθηκευμενο string του καθε πολυγωνου .οχι στο system output.αυτο πως μπορει να υλοποιηθει?

Δημοσ.

δες το έτοιμο όπως το θες ;)

 

>
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();

   }
}

 

βάλε στον ίδιο κατάλογο και τις εικόνες που σου στέλνω

post-134651-129063012523_thumb.jpg

post-134651-129063012524_thumb.jpg

Δημοσ.

φιλε μου σε ευχαριστω παρα πολυ πραγματικα.βοηθησες απιστευτα.

 

---------- Το μήνυμα προστέθηκε στις 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)

Δημοσ.

για να εκτελεστεί σαν applet ο κώδικας θέλει κάποιες αλλαγές

3-4 αν θυμάμαι καλά

δες αυτό που σου στέλνω έχει και html παράδειγμα κλήσης

final.zip

Δημοσ.

δεν εχω καταφερει να το τρεξω σαν applet.ουτε το δικο σου ουτε το δικο μου με τις αντιστοιχες αλλαγες.για να τρεξει σαν applet πρεπει να υπαρχει μεσα στο προγραμμα μια void init(){} και να ειναι η κυρια κλαση extended JApplet..δυστυχως δεν ξερω πιο μπορει να ειναι το κολλημα.αλλα καθε φορα που ανοιγω το html αρχειο αναλογα με τι αλλαγες εχω κανει στο προγραμμα η δεν εμφανιζει τιποτα και μου λεει οτι το applet failed to start η εμφανιζει μονο οτι ζωγραφιζω με g.drawstring (τιτλους κλπ).εχεις καμια ιδεα?Μια υλοποιηση που ειδα στο internet ειναι η δημιουργια καινουριου αρχειου .java που περιεχει την Init και ειναι extend JApplet και εκει μεσα καλεις την main class σου με καποιο τροπο.

Δημοσ.

το παρεδωσα την παρασκευη.ευχαριστω για την βοηθεια virxen το αλλαξα μονος μου.βρηκα καποια πραγματακια για το java applet στο internet. αν θελεις πες μου να σου δωσω λεπτομεριες.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...