Grüße!
Mich plagt folgendes kleines Problem: Ich möchte ein JPanel erzeugen welches als bemalbare Fläche auf ein JFrame gelegt wird. Ein Rechteck wird auf das Panel gezeichnet. Die StandartFarbe des Panels ist grün, sollte sich die Maus jedoch im Rechteck befinden, wird der Hintergrund rot gefärbt. Eigentlich ganz einfach, das Problem ist nur, dass die Maus-Rechteck "Kollision" viel zu spät erkannt wird, also erst, wenn die Maus fast schon in der Mitte des Rechteckes ist, wobei das doch eigentlich auf den Pixel genau passieren sollte. Das wird wohl an den Insets des Frames liegen, und an der Stelle komme ich nicht so ganz weiter. Vielleicht könnt ihr mir ja helfen, das JPanel mitsamt Rechteck korrekt zu platzieren? Ich bedanke mich im Voraus.
Mich plagt folgendes kleines Problem: Ich möchte ein JPanel erzeugen welches als bemalbare Fläche auf ein JFrame gelegt wird. Ein Rechteck wird auf das Panel gezeichnet. Die StandartFarbe des Panels ist grün, sollte sich die Maus jedoch im Rechteck befinden, wird der Hintergrund rot gefärbt. Eigentlich ganz einfach, das Problem ist nur, dass die Maus-Rechteck "Kollision" viel zu spät erkannt wird, also erst, wenn die Maus fast schon in der Mitte des Rechteckes ist, wobei das doch eigentlich auf den Pixel genau passieren sollte. Das wird wohl an den Insets des Frames liegen, und an der Stelle komme ich nicht so ganz weiter. Vielleicht könnt ihr mir ja helfen, das JPanel mitsamt Rechteck korrekt zu platzieren? Ich bedanke mich im Voraus.
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
import java.util.*;
public class ButtonHighlight extends JFrame {
boolean isExit = false;
Insets ins;
BPanel panel;
Rectangle boundings;
static Dimension dimension;
public ButtonHighlight() {
super("Fenster");
setBounds(0,0,400,600);
setVisible(true);
boundings = new Rectangle(50,50,200,100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
dimension = calcSizes();
panel = new BPanel(this);
add(panel);
setVisible(true);
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
checkMove(e.getX(), e.getY());
}
});
}
public Dimension calcSizes() {
ins = this.getInsets();
int fWidth = getWidth() - (ins.left + ins.right);
int fHeight = getHeight() - (ins.top + ins.bottom);
//System.out.println(ins);
return new Dimension (fWidth,fHeight);
}
public void checkMove(int x, int y) {
isExit = boundings.contains(x,y) ? true:false;
}
public static void main (String [] args) {
ButtonHighlight b = new ButtonHighlight();
}
}
class BPanel extends JPanel {
ButtonHighlight bHighlight;
public BPanel(ButtonHighlight b) {
this.bHighlight = b;
setPreferredSize(new Dimension (ButtonHighlight.dimension));
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.draw(bHighlight.boundings);
if (!bHighlight.isExit) {
g2.setColor(Color.GREEN);
g2.fillRect(0,0,getWidth(), getHeight());
} else {
g2.setColor(Color.RED);
g2.fillRect(0,0,getWidth(), getHeight());
}
g2.setColor(Color.BLACK);
g2.draw(bHighlight.boundings);
repaint();
}
}