NullPointer und Swing-Problem

Status
Nicht offen für weitere Antworten.

Antoras

Top Contributor
Hallo,

ich hab mir ein kleines Programm geschrieben, das mir einen Kreis auf ein JPanel zeichnen soll.
Ich hab mir das dabei so vorgestellt: Sobald ich auf den Button "Kreis" und danach auf den Button "zeigen" klicke erscheint der Kreis.
Das sollte so eigentlich auch alles passen.
Auf einer awt-Oberfläche geht ein so ähnliches Programm mal ohne Probleme. Nur bei meinem Swing-Programm wird der Kries nicht gezeichnet.

Weiter bekomme ich immer eine NullPointerException, wenn ich auf den Button "zeigen" klicke bevor ich auf den Button "Kreis" klicke. Der Grund ist mir klar (der Kries wird erst erstellt wenn ich auf den Button "Kreis" klicke), nur wie umgehe ich das am besten? Ich würde später gerne noch andere Objekte wie z.B ein Rechteck oder ein Dreieck zeichnen können. Deswegen wollte ich den Button drinnen lassen.

Hier mal mein Programm:
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class GeoForm extends JFrame {
	
	private Kreis kreis;
	
	final private JButton jButton_zeigen = new JButton("Zeigen");
	final private JButton jButton_verstecken = new JButton("Verstecken");
	final private JButton jButton_exit = new JButton("Exit");
	
	final private JButton jButton_kreis = new JButton("Kreis");
	
	private JPanel jPanel1;
	private JPanel jPanel2;
	private JPanel jPanel3;
	
	
	public static void main(final String[] args) {
		final Runnable gui = new Runnable() {
			public void run() {
				new GeoForm(500, 300);
			}
		};
		SwingUtilities.invokeLater(gui);	
	}
	
	public GeoForm(final int w, final int h) {
		setPreferredSize(new Dimension(w, h));
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocation(300, 300);
		pack();
		gui();
		setVisible(true);
	}
	
	//Graphische Oberflaeche erstellen
	public void gui() {
		setLayout(new BorderLayout());
		{
			jPanel1 = new JPanel() {
				@Override
				protected void paintComponent(final Graphics g) {
					super.paintComponents(g);
					//Kreis zeichnen wenn nicht vorhanden und Button gedrueckt
					jButton_kreis.addMouseListener(new MouseAdapter() {
						public void mouseClicked(final MouseEvent e) {
							if (kreis == null) {
								kreis = new Kreis(100, 100, 100, 10);
							}
							kreis.malen(g);
						}
					});
				}
			};			
			jPanel1.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(final MouseEvent e) {
					bewegen(e);
				}
			});
			getContentPane().add(jPanel1, BorderLayout.SOUTH);
		}		
		{
			jPanel2 = new JPanel(new FlowLayout());
			
			jButton_zeigen.addMouseListener(new MouseAdapter() {
				public void mouseClicked(final MouseEvent e) {
					zeigen(e);
				}
			});
			jPanel2.add(jButton_zeigen, null);
			
			jButton_verstecken.addMouseListener(new MouseAdapter() {
				public void mouseClicked(final MouseEvent e) {
					verstecken(e);
				}
			});
			jPanel2.add(jButton_verstecken, null);
			
			jButton_exit.addMouseListener(new MouseAdapter() {
				public void mouseClicked(final MouseEvent e) {
					exit(e);
				}
			});
			jPanel2.add(jButton_exit, null);
			
			getContentPane().add(jPanel2, BorderLayout.CENTER);
		}
		{
			jPanel3 = new JPanel(new FlowLayout());
			jButton_kreis.addMouseListener(new MouseAdapter() {
				public void mouseClicked(final MouseEvent e) {
					
				}
			});
			jPanel3.add(jButton_kreis, null);
			
			getContentPane().add(jPanel3, BorderLayout.NORTH);
		}		
	}
	
	protected void verstecken(final MouseEvent e) {
		kreis.verstecken();		
	}

	protected void zeigen(final MouseEvent e) {
		kreis.zeigen();		
	}

	protected void bewegen(final MouseEvent e) {
		final int x = e.getX();
        final int y = e.getY();
        final int bewegung = 1;
        
    	jPanel1.repaint(kreis.getXPos(), kreis.getYPos(), kreis.getDurchmesser() + bewegung,
        		kreis.getDurchmesser() + bewegung);
        kreis.gehen(x, y);
        jPanel1.repaint(kreis.getXPos(), kreis.getYPos(), kreis.getDurchmesser() + bewegung,
        		kreis.getDurchmesser() + bewegung);		
	}

	protected void exit(final MouseEvent e) {
		System.exit(0);		
	}
}

class Kreis {
	
	private int xPos;
	private int yPos;
	private int durchmesser;
	private int schrittweite;
	
	private boolean show = false;
		
	public Kreis(final int x, final int y, final int d, final int s) {
		xPos = x;
        yPos = y;        
		durchmesser = d;
		schrittweite = s;
		show = true;
	}
	
	public void zeigen() {
		show = true;
	}
	
	public void verstecken() {
		show = false;
	}
	
	public void malen(final Graphics g) {
		if (show) {
			g.drawOval(xPos, yPos, durchmesser, durchmesser);
		}
    }
	
	public void gehen(final int x, final int y) {
		if (xPos < x) {
			xPos = xPos + schrittweite;
		}
        if (xPos > x) {
        	xPos = xPos - schrittweite;
        }
        if (yPos < y) {
        	yPos = yPos + schrittweite;
        }
        if (yPos > y) {
        	yPos = yPos - schrittweite;
        }
    }
	
	public int getXPos() {
        return xPos;
    }
    public int getYPos() {
        return yPos;
    }
    public int getDurchmesser() {
        return durchmesser;
    }
}
 

Zed

Bekanntes Mitglied
protected void zeigen(final MouseEvent e) {
if(kreis == null){
// Kreis zeichenn
}
kreis.zeigen();
}
 

Antoras

Top Contributor
Stimmt, so würde es gehen. Wobei ich mit der Lösung dann das Problem habe, dass mir mein Button "Kreis" nichts mehr nützt - ich will ja, dass der Kreis erst gezeichnet wird wenn auch dieser Button gedrückt wurde.
Aber so müsste es doch auch gehen:
Code:
protected void zeigen(final MouseEvent e) {
	if (kreis != null) {
		kreis.zeigen();
	}				
}
Dann wird der Kreis auch nur angezeigt wenn der Button gedrückt wurde. Sollte funktionieren. Kann es nur leider nicht ausprobieren weil ich auf dem Panel noch immer nichts sehe...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
Antoras Swing repaint und Nullpointer Java Basics - Anfänger-Themen 6
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
Dimax BufferedReader.readLine().length() wirft NullPointer Java Basics - Anfänger-Themen 6
AlexG. Nullpointer Exeption Java Basics - Anfänger-Themen 46
AlexG. Nullpointer exeption Fehler Java Basics - Anfänger-Themen 0
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
N Nullpointer exception Java Basics - Anfänger-Themen 4
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
J Nullpointer aber wo? Java Basics - Anfänger-Themen 12
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
K Nullpointer beim Erstellen eines Imageicons Java Basics - Anfänger-Themen 2
O Perfomance: Arraylist absichtlich zum Nullpointer schicken... Java Basics - Anfänger-Themen 16
S Iterator next() Nullpointer Java Basics - Anfänger-Themen 2
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
R indexOf wirft NullPointer Exception Java Basics - Anfänger-Themen 2
Q CardLayout und NullPointer Java Basics - Anfänger-Themen 3
R NullPointer Exceptions Java Basics - Anfänger-Themen 3
P ArrayList Nullpointer? Java Basics - Anfänger-Themen 4
H Nullpointer Exception Java Basics - Anfänger-Themen 8
P NullPointer Exception Java Basics - Anfänger-Themen 6
C Erste Schritte GUI - ActionListener - Exception Nullpointer Java Basics - Anfänger-Themen 5
M TextField Nullpointer Exc Java Basics - Anfänger-Themen 8
C Java Nullpointer Exception in 2D-Spiel Snake Java Basics - Anfänger-Themen 8
N NullPointer Exception bei setSource (Audioplayer mit JMF) Java Basics - Anfänger-Themen 6
I Array - Nullpointer Ausnahme Java Basics - Anfänger-Themen 2
J Methoden in externer Klasse -> Nullpointer Exception Java Basics - Anfänger-Themen 9
J NullPointer bei ArrayList.add Java Basics - Anfänger-Themen 6
J Nullpointer Exception - Warum? Java Basics - Anfänger-Themen 9
C NullPointer Java Basics - Anfänger-Themen 3
D NullPointer bei ActionCommand in Array Java Basics - Anfänger-Themen 2
D Dubioser Nullpointer Java Basics - Anfänger-Themen 5
M Java3D TransformChanged nullpointer ??? Java Basics - Anfänger-Themen 2
K zufallszahlen in Array Speichern = Nullpointer exception Java Basics - Anfänger-Themen 24
X Nullpointer Fehler Java Basics - Anfänger-Themen 3
D Nullpointer Exception Java Basics - Anfänger-Themen 2
Developer_X NullPointer Exception ohne Sinn Java Basics - Anfänger-Themen 19
MEETyA NullPointer Exception - Sudoku Java Basics - Anfänger-Themen 2
R Probleme mit NullPointer beim Mp3 abspielen (JMF) Java Basics - Anfänger-Themen 21
D Nullpointer exception bei: if( (rc.getTower != null) ) {..} Java Basics - Anfänger-Themen 2
Antoras Nullpointer bei Wertübergabe Java Basics - Anfänger-Themen 10
G NullPointer bei if anweisung Java Basics - Anfänger-Themen 14
G (csv)Datei lesen FindBug findet mgl. NullPointer - wie lösen Java Basics - Anfänger-Themen 3
A g=panel.getGraphics() im Thread => Nullpointer Java Basics - Anfänger-Themen 9
G Problem mit Nullpointer Exception Java Basics - Anfänger-Themen 2
K Nullpointer Exception? Was tun? Java Basics - Anfänger-Themen 7
T KeyListener, Nullpointer und eine unbekannte Variable Java Basics - Anfänger-Themen 6
E Fehler NullPointer beim Ausführen Java Basics - Anfänger-Themen 4
E nullpointer bei BufferedImage Java Basics - Anfänger-Themen 2
R Wieder mal ne NullPointer Exception. Java Basics - Anfänger-Themen 8
D nullpointer exception Java Basics - Anfänger-Themen 12
S Arrays und Nullpointer Java Basics - Anfänger-Themen 6
D Problem mit Vector / Nullpointer Exception Java Basics - Anfänger-Themen 3
S Nullpointer Exception bei Point2D Java Basics - Anfänger-Themen 2
8 JLayer Nullpointer Exception Java Basics - Anfänger-Themen 6
megachucky kleines problem mit einer nullpointer exception Java Basics - Anfänger-Themen 2
B NullPointer... Java Basics - Anfänger-Themen 6
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben