• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

JApplet Problem

Status
Für weitere Antworten geschlossen.

Durst

Neues Mitglied
Hallo,
also erstmal ist zu sagen ich bin noch ein ziemlicher anfänger in java.
ich habe da grad ein problem mit einem JApplet:



ich habe 3 klassen, erstmal die main klasse, mit int{} und so, dort hab ich actionlistener für buttons, wenn ich jetzt auf z.b. den button "Start" drücke, wird ein objekt der 2. klasse "Fenster" erstellt, ein frame halt und sichtbar gemacht, und ein objekt der 3. klasse "Kreis" wird erstellt. hier mal der code

Code:
			b2.addActionListener(new ActionListener() 
			{ 
				public void actionPerformed(ActionEvent evt) 
				{ 
					startframe = new fenster(500,500,"Start");
					startframe.sichtbarkeit(true);
					rotkreis = new kreis(10,10,10,10);
					startframe.malen();

				} 
			});


meine "fenster" klasse sieht so aus:

Code:
	public void malen()
	{

		frame.add( new DrawPanel() ); 
	}
}

class DrawPanel extends JPanel 
{ 

	protected void paintComponent( Graphics g ) 
	{ 
			super.paintComponent( g ); 
			g.drawLine( 10, 10, 100, 50 ); 
	} 
}

das funktioniert ja nun auch, wenn ich auf den button drück wird die linie gezeichnet....
nun is meine frage, wie lasse ich das erstelle "Kreis" Objekt zeichnen???

ich habe es mit so einer methode probiert:
Code:
	public void kreiszeichnen()
	{
	kreisrot.drawOval(breite, hoehe, x, y);
	startframe.add(new DrawPanel());
	
	}

in der "Kreis" klasse, aber funktioniert auch nicht, wäre toll wenn ihr mir helfen könnt, thx

mfg
 
Code:
import javax.swing.*;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JButton;
import java.awt.event.*;
import javax.swing.JPanel; 
public class main extends JApplet
{ 

	 public fenster eigenschaftsframe, startframe;
	 public kreis rotkreis;
	 JButton b1 = new JButton("Einstellungen");
	 JButton b2 = new JButton("Start");
	 JButton b3 = new JButton("OK");
	 Graphics Kreis;

	 public void init() 
	{
	    Container cp = getContentPane();
	    cp.setLayout(null);
	    cp.add(b1);
	    b1.setBounds(100, 200, 150, 70);
	    cp.add(b2);
	    b2.setBounds(100,100,150,70);
	    
	}

	public void  start()
		{   
			b2.addActionListener(new ActionListener() 
			{ 
				public void actionPerformed(ActionEvent evt) 
				{ 
					startframe = new fenster(500,500,"Start");
					startframe.sichtbarkeit(true);
					rotkreis = new kreis(10,10,10,10);
					rotkreis.kreiszeichnen();

				} 
			});
			
		}

}
da die main class, das für diese geschichte unwichtige hab ich mal raus genommen, da es sonst zu unübersichtlich wird(ein anderer frame z.b.)

Code:
import java.awt.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
public class fenster extends main
{


	int f_breite,f_hoehe;
	String f_name;
	JFrame frame = new JFrame();
	JPanel panel = new JPanel();
	//konstruktor
	public fenster(int breite, int hoehe,String Name)
	{

	frame.add(panel);
	frame.setTitle(Name);
	frame.setSize(breite,hoehe);
	panel.setLayout(null);
	f_name = Name;
	f_breite = breite;
	f_hoehe = hoehe;
	}

	public void sichtbarkeit(boolean visi)
	{
		frame.setVisible(visi);
	}

	public void malen()
	{

		frame.add( new DrawPanel() ); 
	}
}

class DrawPanel extends JPanel 
{ 

	protected void paintComponent( Graphics g ) 
	{ 
			super.paintComponent( g ); 
			g.drawLine( 10, 10, 100, 50 ); 
	} 
}

die klasse um für die frames



Code:
import javax.swing.*;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.JPanel; 

class kreis extends main
{
	int breite,hoehe,x,y;
	public Graphics kreisrot;
	public kreis(int kbreite, int khoehe, int kx, int ky)
	{
		breite = kbreite;
		hoehe = khoehe;
		x = kx;
		y = ky;
	}
	
	public void kreiszeichnen()
	{
	kreisrot.drawOval(breite, hoehe, x, y);
	startframe.add(new DrawPanel());
	
	}	
}

und die kreis klasse
 
Hallo,
Code:
kreisrot.drawOval(breite, hoehe, x, y);
die klasse kreis enthält keine methode namens darwOval()!!!!
dieser methodenaufruf geht nur, wenn kreisrot ein graphics-objekt ist
mfg Bleistift
 
Hallo,

Hallo,
Code:
kreisrot.drawOval(breite, hoehe, x, y);
die klasse kreis enthält keine methode namens drawOval()!!!!
dieser methodenaufruf geht nur, wenn kreisrot ein graphics-objekt ist
mfg Bleistift

Das ist nicht wahr und auch nicht das Problem.
a) drawOval() ist eine Methode der Klasse Graphics
b) kreisrot ist ein Attribut vom Typ Graphics

Das Problem ist ein anderes ... siehe unten

In Deiner Klasse kreis deklarierst Du ein Klassenattribut vom Typ Graphics mit dem Namen kreisrot. Da Du keinerlei Instanz erzeugst ist diese "Referenz" = null. Somit bekommst Du beim Zugriff mit
Code:
kreisrot.drawOval(breite, hoehe, x, y);
höchstwahrscheinlich eine NullPointerException.

Du musst, bevor Du mit einer "Objektreferenz" arbeiten willst, eine Instanz erzeugen. Aber beachte bitte das die Klasse Graphics abstrakt ist und somit nicht instantiiert werden kann.

Hier musst Du mit Vererbung arbeiten.

Wenn ich nachher Zeit finde, kann ich Dir gerne mal ein kleines "Beispiel" dazu online stellen.

Gruß Sven
 
Hallo,
kann es auch daran liegen, dass das Graphics-Objekt kreisrot nirgendwo in ein Panel o. ä. gezeichnet wird?
mfg Bleistift
 
Hallo,
kann es auch daran liegen, dass das Graphics-Objekt kreisrot nirgendwo in ein Panel o. ä. gezeichnet wird?
mfg Bleistift

Nein, wie gesagt es liegt vorerst daran das keine Instanz für diese Klasse besteht. Und wenn ich auf etwas zugreife was binär null ist, wird das einfach nicht funktionieren und man bekommt zur Laufzeit (wenn man den Button drückt) eine NullPointerException (wie schon oben erwähnt).

Gruss
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben