ich erzeuge ein 2D Obj. und stelle darauf eine mathem. Funktionskurve da. jetzt möchte ich, dass wenn man mit der Maus über die Linie fährt in einer art tooltip die genauen errechneten werte für die stelle angezeigt werden, auf der die maus grad ist. (also quasi die manipulierte x und y koordinate)
habe das schon mit tooltip probiert, aber das funktioniert wohl nicht mit 2D objekten.
PHP-Code:
class AusgangsPanel extends JPanel
{
Cursor cursor;
MyMenuItem mmi;
MyPopupMenu mpm;
float U_Norm = 2.5f;
float U_test=2.4f;
float t_Norm = 2.3f;
int x_koord_1=30;
int x_koord_2;
int y_koord_1=340;
int y_koord_2;
double y_wert;
int anfang=0;
public AusgangsPanel()
{
setPreferredSize(new Dimension(250,200));
cursor = new Cursor(Cursor.CROSSHAIR_CURSOR);
setCursor(cursor);
mmi = new MyMenuItem();
mpm = new MyPopupMenu();
addMouseListener( new MyMouseListener());
}
class MyMenuItem extends JMenuItem
{
public MyMenuItem()
{
setOpaque(false);
setBorderPainted(false);
}
protected void paintComponent(Graphics g)
{
g.setColor(new Color(220, 220, 220));
g.fillRoundRect(0, 0, 40, 20, 20, 20);
g.setColor(Color.black);
}
}
class MyPopupMenu extends JPopupMenu
{
public MyPopupMenu()
{
setPreferredSize(new Dimension(42,25));
setBorderPainted(false);
}
protected void paintComponent(Graphics g)
{
g.setColor(new Color(240,240,240));
g.fillRect(0,0,42,25);
}
public boolean contains(int x, int y)
{
return false;
}
}
class MyMouseListener extends MouseAdapter
{
public void mouseEntered(MouseEvent me)
{
/*if(bi.getRGB(me.getX(),me.getY())==0x000080)
{
koordinaten_angabe(me.getX(),me.getY());
}*/
int x=me.getX();
int y=me.getY();
gfat.setColor(new Color(255,255,255));
gfat.fillRect(x+3,y+2,x+50,y+50);
}
}
public void paint(Graphics g)
{
int w = getWidth();
int h = getHeight();
String a;
g.setColor(new Color(240, 240, 240));
g.fillRect(0,0,w,h);
// Linien-staerke-dick------------------------
BasicStroke pen_1 = new BasicStroke(2.0f, BasicStroke.JOIN_ROUND, BasicStroke.JOIN_ROUND);
gfat.setStroke(pen_1);
//-----------------------------------------
//Linien-staerke-duenn-------------------
BasicStroke pen_2 = new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
gsmall.setStroke(pen_2);
//-----------------------------------------
gbi.setStroke(pen_2);
//Rahmen-mit-Text---------------------------
g.setColor(Color.LIGHT_GRAY);
g.drawLine(3, 5, 7, 5); // oben waagrecht links von schrift
g.drawLine(100, 5, w - 3, 5);//oben waagrecht rechts von schrift
g.drawLine(w - 3, 5, w - 3, h - 3); // rechts senkrecht
g.drawLine(w - 3, h - 3, 3, h - 3); // unten waagrecht
g.drawLine(3, h - 3, 3, 5); //links senkrecht
g.setColor(Color.gray);
g.setFont(new Font("Dialog", Font.BOLD, 12));
g.drawString("Ausgangssignal", 10, 10);
//Ende--------------------------------------
//Loeschen----------------------------------
gbi.setColor(new Color(240, 240, 240));
gbi.fillRect(0, 0, w, h);
//Ende--------------------------------------
//Koordinatensystem-----------
gbi.setColor(Color.black);
gbi.drawLine(30, h-30, 30, 30);// senkrechte achse
gbi.drawLine(20, 340, w-20, 340); // waagrechte Achsen
gbi.drawLine(w-20, 340,w-30,335); // pfeilspitze
gbi.drawLine(w-20,340,w-30,345); // von waagrechteachse
gbi.drawLine(30, 30,35,40); // pfeilspitze
gbi.drawLine(30,30,25,40); // von senkrechteachse
//Achsenbeschriftung-----------------------------
gbi.setFont(new Font("SansSerif",Font.PLAIN, 13));
gbi.drawString("t",w-15,345); //Achsenbeschriftung senkrechte A.
gbi.drawString("U (t)/V",10 ,25); //Achsenbeschriftung senkrechte A.
gbi.setFont(new Font("SansSerif",Font.PLAIN, 11));
gbi.drawString("a",20,27);
gfat.setStroke(pen_1);
gbi.setFont(new Font("SansSerif",Font.BOLD, 10));
gbi.setColor(Color.black);
//---Achsenbeschriftung ---
//-----x- Achse
for (int i=0; i<=390; i+=23)
{
gbi.drawLine(30+i, 344, 30+i, 336);
a= String.valueOf((int)(2*i/t_Norm));
gbi.drawString(a,(25)+i,355);
}
gbi.setFont(new Font("SansSerif",Font.CENTER_BASELINE, 10));
//-----y- Achse
for (int i=0; i<=280; i+=25)
{
gbi.drawLine(26, 340-i, 34, 340-i);
a= String.valueOf((int)(i/U_Norm));
gbi.drawString(a,10,(340)-i);
}
/////////////////// Kurve zeichnen
final int N=390;
int y0=340;
int xa=30;
int []x=new int [N];
int []y=new int [N];
for (int i =0;i<N;i++)
{
berechnung.werteberechnung(i);
y_wert=(double)(berechnung.getua_n()*U_test*50);
x[i]=xa+(i);
y[i]=(int)(y0-y_wert);
}
gfat.setPaint(new Color(0,0,128));
gfat.setStroke(pen_1);
gfat.drawPolyline(x,y,N);
g.clipRect(10,12,w-14,h-15);
g.drawImage(bi, 0, 0, null);
} //Paint Ende
}//---AusgangsPaneDE----
}//AusgangsPanel() ENDE
class AusgangsPanel extends JPanel
{
Cursor cursor;
MyMenuItem mmi;
MyPopupMenu mpm;
float U_Norm = 2.5f;
float U_test=2.4f;
float t_Norm = 2.3f;
int x_koord_1=30;
int x_koord_2;
int y_koord_1=340;
int y_koord_2;
double y_wert;
int anfang=0;
public AusgangsPanel()
{
setPreferredSize(new Dimension(250,200));
cursor = new Cursor(Cursor.CROSSHAIR_CURSOR);
setCursor(cursor);
mmi = new MyMenuItem();
mpm = new MyPopupMenu();
addMouseListener( new MyMouseListener());
}
class MyMenuItem extends JMenuItem
{
public MyMenuItem()
{
setOpaque(false);
setBorderPainted(false);
}
protected void paintComponent(Graphics g)
{
g.setColor(new Color(220, 220, 220));
g.fillRoundRect(0, 0, 40, 20, 20, 20);
g.setColor(Color.black);
}
}
class MyPopupMenu extends JPopupMenu
{
public MyPopupMenu()
{
setPreferredSize(new Dimension(42,25));
setBorderPainted(false);
}
protected void paintComponent(Graphics g)
{
g.setColor(new Color(240,240,240));
g.fillRect(0,0,42,25);
}
public boolean contains(int x, int y)
{
return false;
}
}
class MyMouseListener extends MouseAdapter
{
public void mouseEntered(MouseEvent me)
{
/*if(bi.getRGB(me.getX(),me.getY())==0x000080)
{
koordinaten_angabe(me.getX(),me.getY());
}*/
int x=me.getX();
int y=me.getY();
gfat.setColor(new Color(255,255,255));
gfat.fillRect(x+3,y+2,x+50,y+50);
}
}
public void paint(Graphics g)
{
int w = getWidth();
int h = getHeight();
String a;
g.setColor(new Color(240, 240, 240));
g.fillRect(0,0,w,h);
// Linien-staerke-dick------------------------
BasicStroke pen_1 = new BasicStroke(2.0f, BasicStroke.JOIN_ROUND, BasicStroke.JOIN_ROUND);
gfat.setStroke(pen_1);
//-----------------------------------------
//Linien-staerke-duenn-------------------
BasicStroke pen_2 = new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
gsmall.setStroke(pen_2);
//-----------------------------------------
gbi.setStroke(pen_2);
//Rahmen-mit-Text---------------------------
g.setColor(Color.LIGHT_GRAY);
g.drawLine(3, 5, 7, 5); // oben waagrecht links von schrift
g.drawLine(100, 5, w - 3, 5);//oben waagrecht rechts von schrift
g.drawLine(w - 3, 5, w - 3, h - 3); // rechts senkrecht
g.drawLine(w - 3, h - 3, 3, h - 3); // unten waagrecht
g.drawLine(3, h - 3, 3, 5); //links senkrecht
g.setColor(Color.gray);
g.setFont(new Font("Dialog", Font.BOLD, 12));
g.drawString("Ausgangssignal", 10, 10);
//Ende--------------------------------------
//Loeschen----------------------------------
gbi.setColor(new Color(240, 240, 240));
gbi.fillRect(0, 0, w, h);
//Ende--------------------------------------
//Koordinatensystem-----------
gbi.setColor(Color.black);
gbi.drawLine(30, h-30, 30, 30);// senkrechte achse
gbi.drawLine(20, 340, w-20, 340); // waagrechte Achsen
gbi.drawLine(w-20, 340,w-30,335); // pfeilspitze
gbi.drawLine(w-20,340,w-30,345); // von waagrechteachse
gbi.drawLine(30, 30,35,40); // pfeilspitze
gbi.drawLine(30,30,25,40); // von senkrechteachse
//Achsenbeschriftung-----------------------------
gbi.setFont(new Font("SansSerif",Font.PLAIN, 13));
gbi.drawString("t",w-15,345); //Achsenbeschriftung senkrechte A.
gbi.drawString("U (t)/V",10 ,25); //Achsenbeschriftung senkrechte A.
gbi.setFont(new Font("SansSerif",Font.PLAIN, 11));
gbi.drawString("a",20,27);
gfat.setStroke(pen_1);
gbi.setFont(new Font("SansSerif",Font.BOLD, 10));
gbi.setColor(Color.black);
//---Achsenbeschriftung ---
//-----x- Achse
for (int i=0; i<=390; i+=23)
{
gbi.drawLine(30+i, 344, 30+i, 336);
a= String.valueOf((int)(2*i/t_Norm));
gbi.drawString(a,(25)+i,355);
}
gbi.setFont(new Font("SansSerif",Font.CENTER_BASELINE, 10));
//-----y- Achse
for (int i=0; i<=280; i+=25)
{
gbi.drawLine(26, 340-i, 34, 340-i);
a= String.valueOf((int)(i/U_Norm));
gbi.drawString(a,10,(340)-i);
}
/////////////////// Kurve zeichnen
final int N=390;
int y0=340;
int xa=30;
int []x=new int [N];
int []y=new int [N];
for (int i =0;i<N;i++)
{
berechnung.werteberechnung(i);
y_wert=(double)(berechnung.getua_n()*U_test*50);
x[i]=xa+(i);
y[i]=(int)(y0-y_wert);
}
gfat.setPaint(new Color(0,0,128));
gfat.setStroke(pen_1);
gfat.drawPolyline(x,y,N);
g.clipRect(10,12,w-14,h-15);
g.drawImage(bi, 0, 0, null);
} //Paint Ende
}//---AusgangsPaneDE----
}//AusgangsPanel() ENDE