Hallo, mein programm arbeitet mit selbstdefinierten shapes, die der anwender maus-sensitiv ansprechen kann. ich habe ein beispiel-code hier. nun habe ich folgendes festgestellt: befindet sich der mauszeiger auf der linken oder oberen kante, liefert die methode Polygon.contains(Point) true zurück. befindet sich der mauszeiger allerdings auf den rechten oder unteren kante des polygons, ist das rückgabeergebnis false. auch wenn ich vor dem zeichnen des polygons dieses als clipping-region per setClip(polygon) setze, fehlt nach dem zeichnen - wahrscheinlicherweise aufgrund der falschen contains-rückgaben - die rechte und untere kante.
wie kann man übergehen?
mit freundlichen grüßen aus berlin,
René
wie kann man übergehen?
mit freundlichen grüßen aus berlin,
René
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ContainsTest extends JFrame {
private static final long serialVersionUID = 1L;
Polygon polygon = new Polygon();
JLabel jLabelPositionX = new JLabel("x Position : ");
JLabel jLabelPositionY = new JLabel("y Position : ");
JLabel jLabelIsInShape = new JLabel("Mouse position is in shape ? ");
public ContainsTest() {
this.setBounds(50, 50, 500, 500);
this.setVisible(true);
polygon.addPoint(50, 50);
polygon.addPoint(50, 200);
polygon.addPoint(150, 200);
polygon.addPoint(150, 50);
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.getContentPane().setLayout(null);
this.getContentPane().add(this.jLabelPositionX);
jLabelPositionX.setBounds(200, 200, 250, 25);
this.getContentPane().add(this.jLabelPositionY);
jLabelPositionY.setBounds(200, 225, 250, 25);
this.getContentPane().add(this.jLabelIsInShape);
jLabelIsInShape.setBounds(200, 250, 250, 25);
this.addMouseMotionListener(new MouseAdapter(){
@Override
public void mouseMoved(MouseEvent mE) {
jLabelPositionX.setText("x Position : " + mE.getX());
jLabelPositionY.setText("y Position : " + mE.getY());
jLabelIsInShape.setText("Mouse position is in shape ? " + polygon.contains(mE.getPoint()));
}});
}
public static void main(String[] args) {
ContainsTest clipTest = new ContainsTest();
clipTest.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
public void paint(Graphics g) {
g = (Graphics2D) g;
super.paintComponents(g);
super.paint(g);
super.paintAll(g);
g.setColor(Color.BLACK);
//g.setClip(polygon);
g.drawPolygon(polygon);
}
}