Hallo,
ich schreibe grad ein kleines Dartprogramm, welches durch klicks auf eine virtuelle Dartscheibe die Punkte von Spielern errechnen soll.
Das Erfassen der Mausposition mittels MouseListener und MouseMotionListener klappt schonmal einwandfrei. Jetzt möchte ich aber einen Mouse-over-effekt bei den einzelnen Feldern haben, und das will nicht so richtig.
Das ganze läuft über einen Thread in einem JFrame, gezeichnet wird auf ein JPanel. Die Klassen sind gemäß dem MVC-Konzept ausgelagert. Hier sind mal ein paar Zeilen Code:
Das Frame
Das JPanel:
Also im Prinzip war es meine Idee, den Pfad des Images "hover" zu ändern, sobald die Maus auf ein entsprechendes Feld gelangt, ansonsten soll ein durchsichtiges Image "clear.png" gezeichnet werden. Eine Vermutung ist, dass irgendetwas mit der paintComponent-Methode nicht stimmt. Zum Test hab ich in dieser mal einen int hochzählen lassen, bei 40-180 war immer schluss. Ich hab jetzt schon recht lange rumprobiert und komme auf keinen grünen Zweit, vielleicht weiß ja jemand Rat.
Falls ich noch etwas an Code posten soll, oder noch Unklaheiten bestehen, einfach sagen.
mfg, Christian
ich schreibe grad ein kleines Dartprogramm, welches durch klicks auf eine virtuelle Dartscheibe die Punkte von Spielern errechnen soll.
Das Erfassen der Mausposition mittels MouseListener und MouseMotionListener klappt schonmal einwandfrei. Jetzt möchte ich aber einen Mouse-over-effekt bei den einzelnen Feldern haben, und das will nicht so richtig.
Das ganze läuft über einen Thread in einem JFrame, gezeichnet wird auf ein JPanel. Die Klassen sind gemäß dem MVC-Konzept ausgelagert. Hier sind mal ein paar Zeilen Code:
Das Frame
Java:
@Override
public void mouseMoved(MouseEvent e) {
double x = Math.abs((e.getX() - 804));
double y = Math.abs((e.getY() - 387));
double length = Math.hypot(x, y);
double angle = (Math.cos((100 * (e.getY() - 387)) / (100 * length))) * 10;
//Hover
//20
if (length >= 146 && length < 310 && (e.getX() >= 804 && e.getY() <= 387 && length < 310 && length > 90)) {
content.setSource("20.png");
System.out.println(content.getSource());
}
}
Das JPanel:
Java:
/**
* Variablen für die Doppelpufferung.
*/
private Image dbImage;
private Graphics dbg;
int a = 0;
private Image background;
private String source = "clear.png";
private Image hover;
public void loadPics() {
hover = Toolkit.getDefaultToolkit().getImage("src/pics/" + source);
background = Toolkit.getDefaultToolkit().getImage("src/pics/boardBig.png");
}
public void setSource(String src) {
source = src;
}
public String getSource() {
return source;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
loadPics();
g.drawImage(background, 0, 0, this);
g.drawImage(hover, 0, 0, this);
}
Falls ich noch etwas an Code posten soll, oder noch Unklaheiten bestehen, einfach sagen.
mfg, Christian