I
Ja, oftmals ist es nicht schlecht vorhin noch etwas kleineres mit GUI zu machen. GUi-Programmierung ist leider gar nicht so leicht.
Hier mal ein kleines Beispiel, das ich für mich vor längerem mal ausprobiert hatte. Achte dabei vor allem auf die paintComponent-Methode und die mouseRealesed-Methode.
So als kleiner Denkanstoss (ich glaube irgendwo ist ein kleiner Fehler drin. Falls beim drafklicken noch nichts passiert, dann ändere mal die Grösse des Fensters):
package clickdemo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JFrame {
private Container c;
private ClickPanel clickPanel;
Main(){
c = getContentPane();
// clickPanel is initialized
clickPanel = new ClickPanel();
clickPanel.setBackground(Color.RED);
// clickPanel is added to the contentPane
c.add( clickPanel, BorderLayout.CENTER );
this.setSize( 800, 600 );
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
// GUI must be realized on EDT
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
new Main();
}
});
}
}
class ClickPanel extends JPanel implements MouseListener {
List<Point> list;
public ClickPanel(){
list = new ArrayList<Point>();
this.addMouseListener( this ); // added to MouseListener
}
// all ovals are drawn within the paintComponent-Method
@Override
public void paintComponent(Graphics g){
super.paintComponent(g); // mandatory call to super class to clean the window
for( int i = 0; i < list.size(); i++){
g.fillOval( list.get(i).x, list.get(i).y, 10, 10 );
}
}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {
list.add( new Point( e.getX(), e.getY() ) );
this.repaint();
}
}