# Probleme mit ActionListener



## kulturfenster (27. Feb 2007)

Hallo,

Es geht um folgende Aufgabe: Write a program that prompts the user for an integer and then draws as many rectangles at random positions in a component as the user requested.

Hier mein Versuch, zuerst der Rectangle:


```
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;
import java.util.Random;

public class RectangleZeichner extends JComponent {

	private Rectangle box;
	private int x;
	private int y;
	private int breite = 20;
	private int laenge = 30;
	private Random generator;

	
	public RectangleZeichner()
	{
		box = new Rectangle(x,y, breite, laenge);
	}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.draw(box);
	}
	
	public void moveRec(int anzahl)
	{
		for (int i = 1; i <= anzahl; i++);
		{
			x = generator.nextInt();
			y = generator.nextInt();
			box.setLocation(x,y);
		}
	}
	
	
}
```

und hier noch die MainMethode:

```
package P12_11;

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.geom.Rectangle2D;

public class RectangleTester {

	final static int breite = 500;
	final static int hoehe = 500;

	public static void main(String[] args)
	{
		JFrame frame = new JFrame("RecheckZeiger");
		JButton button = new JButton("GO!");
		JPanel panel = new JPanel();
		final JTextField field = new JTextField(10);
	
		final RectangleZeichner r = new RectangleZeichner();
		
		panel.add(field);
		panel.add(button);
		frame.add(panel);
		
		class AddActionListener implements ActionListener 
		{
			public void actionPerformed(ActionEvent event)
			{
				int anzahl = Integer.parseInt(field.getText());
				r.moveRec(anzahl);
				r.repaint();
			}
		}
		
		ActionListener listener = new AddActionListener();
		button.addActionListener(listener);
		
		frame.setSize(breite, hoehe);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
	}
}
```

Würd mich natürlich freuen, wenn's nur ein kleiner Tippfehler hätte und den sofort jemand erkennen würde. Kann aber auch sein, dass ich was Grundlegendes mit ActionListenenern noch nicht kapiert habe.


----------



## SlaterB (27. Feb 2007)

was geht denn nicht?.............

auf jedenfall kannst du keine Klasse in der main deklarieren,
entweder die Klasse außerhalb deklarieren oder eine anonyme Klasse:


```
Listener x = new Listener() {

...


};
```


----------



## Beni (27. Feb 2007)

Natürlich kann man das SlaterB, Klassen kann man _überall_ definieren :bae:

kulturfenster:
1. Lies die Fehlermeldung die da beim klicken auf den Button kommt. NullPointer + Zeilenzahl -> "generator" ist null.
2. Solange die Box keine Farbe hat, siehst du sie garantiert nie. "g.setColor( Color.RED )" kann da helfen (bevor die Box gezeichnet wird).
3. Und dann solltest du diesen RectangleZeichner auch noch auf irgendein Fenster setzten, sonst sieht man ihn ja nicht :wink:


----------



## SlaterB (27. Feb 2007)

praktisch


----------



## kulturfenster (27. Feb 2007)

vielen Dank für die raschen Antworten!

ich hab die RectangleKlasse getestet; das Rechteck erscheint. Eine Farbe anfügen war nicht nötig, standartmässig kommt ja schwarz.

ich hab nun aber "panel.add(r);" hinzugefügt, ohne dass sich etwas geändert hätte.

hier noch die komplette Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at P12_11.RectangleZeichner.moveRec(RectangleZeichner.java:36)
	at P12_11.RectangleTester$1AddActionListener.actionPerformed(RectangleTester.java:31)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)


----------



## Beni (27. Feb 2007)

Beni hat gesagt.:
			
		

> kulturfenster:
> 1. Lies die Fehlermeldung die da beim klicken auf den Button kommt. NullPointer + Zeilenzahl -> "generator" ist null.


----------

