http://nopaste.debianforum.de/6624
Dort wird einfach ein JFrame erstellt und wenn man auf die Fläche im JFrame klickt wird dort ein JButton erstellt. Ich musste die Koordinaten erst mit -21/-5 bearbeiten, damit die linke obere Ecke des Buttons unter der Spitze des Mauszeigers ist. Ich versuche gerade etwas anderes zu Programmieren und da nervt das gewaltig.
Wieso ist das so und wie bekomme ich das weg?
Das System ist Debian Sid mit Java5 und Eclipse 3.2
Liegt vielleicht daran, dass Du mit e.getX(), e.getY() die Koordinaten bezogen auf den JFrame bekommst - inklusive Titelleiste. Den JButton fügst Du aber dem ContentPane des JFrame hinzu und der hat offensichtlich andere Koordinaten. Zumindest funktioniert es besser, wenn Du erst ein JPanel dem JFrame hinzufügst:
Code:
import java.awt.BorderLayout;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Bee extends JFrame implements MouseListener
{
int klickcount = 0;
int entercount = 0;
private static JPanel jPanel;
private static Bee f;
public static void main( String[] args )
{
f = new Bee();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 400, 400 );
jPanel = new JPanel();
jPanel.addMouseListener(f);
f.setLayout(new BorderLayout());
f.add(jPanel,BorderLayout.CENTER);
f.setVisible( true );
f.addMouseListener(f);
}
public void mouseClicked(MouseEvent e) {
// TODO Automatisch erstellter Methoden-Stub
}
public void mouseEntered(MouseEvent e) {
// TODO Automatisch erstellter Methoden-Stub
System.out.println("Maus rein!"+ entercount);
entercount++;
}
public void mouseExited(MouseEvent e) {
// TODO Automatisch erstellter Methoden-Stub
}
public void mousePressed(MouseEvent e) {
// TODO Automatisch erstellter Methoden-Stub
System.out.println("KLICK! " + klickcount);
klickcount++;
JButton label = new JButton("button");
label.setLocation(e.getX(), e.getY());
label.setSize(80, 20);
System.out.println( "X: " + e.getX() + ", Y: " + e.getY() );
System.out.println( label.getLocation() );
System.out.println( label.getSize());
jPanel.add(label);
jPanel.repaint();
}
public void mouseReleased(MouseEvent e) {
// TODO Automatisch erstellter Methoden-Stub
}
}