Holla.
Ich will ne Klasse schreiben --- Zeichenmethode AWT ---, in der man zwei Ufos bewegen kann. Sie sollen per Pfeiltasten gesteuert werden, mit einem Button soll man die Bedienung des Ufos wechseln. Mit drei Reglern werden die Farbwerte der Ufos gesteuert, das eine RGB, das andere mit vertauschten Farbwerten, GBR. Bloß irgendwie ist der einzige Listener, der funktioniert, der AdjustmentListener der Scrollbars.
Mit dem ActionListener will ich abfragen, ob der wechsel-Button betätigt wurde, mit dem KeyListener will ich die Eingabe von den Pfeiltasten abhorchen.
Finde den Fehler bloß leider nicht ... :-/
Hoffe, ihr könnt mir weiterhelfen
(und: wg. groß- und Kleinschreibung von Klassennamen: ich gelobe Besserung
)
Wenn ich den code nun ausführe, klappt alles, nur Meldet mir Netbeans das im Run-Fenster:
Danke schon mal,
Gentle
Ich will ne Klasse schreiben --- Zeichenmethode AWT ---, in der man zwei Ufos bewegen kann. Sie sollen per Pfeiltasten gesteuert werden, mit einem Button soll man die Bedienung des Ufos wechseln. Mit drei Reglern werden die Farbwerte der Ufos gesteuert, das eine RGB, das andere mit vertauschten Farbwerten, GBR. Bloß irgendwie ist der einzige Listener, der funktioniert, der AdjustmentListener der Scrollbars.
Mit dem ActionListener will ich abfragen, ob der wechsel-Button betätigt wurde, mit dem KeyListener will ich die Eingabe von den Pfeiltasten abhorchen.
Finde den Fehler bloß leider nicht ... :-/
Hoffe, ihr könnt mir weiterhelfen
(und: wg. groß- und Kleinschreibung von Klassennamen: ich gelobe Besserung
Code:
/*
* ufozeichnen.java
*
* Created on 16. Jänner 2007, 17:20
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package schule;
/**
*
* @author Gentle
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class ufozeichnen extends Applet implements AdjustmentListener, KeyListener, ActionListener{
/** Initialization method that will be called after the applet is loaded
* into the browser.
*/
int r=127, b=64, g=80, ieh=0;
int[] x={40,300},y={50,200};
Scrollbar rot = new java.awt.Scrollbar(Scrollbar.HORIZONTAL,r,1,0,255);
Scrollbar gruen = new java.awt.Scrollbar(Scrollbar.HORIZONTAL,g,1,0,255);
Scrollbar blau = new java.awt.Scrollbar(Scrollbar.HORIZONTAL,b,1,0,255);
Button change = new Button("wechsel");
public void init()
{
setBackground(Color.BLACK);
add(rot);
add(gruen);
add(blau);
add(change);
rot.addAdjustmentListener(this);
gruen.addAdjustmentListener(this);
blau.addAdjustmentListener(this);
addKeyListener(this);
}
public void actionPerformed(ActionEvent e){
//Wenn der gedrückte Button change ist, wechsle den wert von ieh -> 1 wird zu 0 und umgekehrt.
if(e.getSource() == change)
{
if(ieh == 1)
{
ieh = 0;
}
else
{
ieh+=1;
}
}
repaint();
}
public void keyPressed( KeyEvent e ) { }
public void keyReleased( KeyEvent e ) { }
public void keyTyped( KeyEvent e ) {
if ( e.getKeyCode() == e.VK_UP )
{
y[ieh]--;
}
else if( e.getKeyCode() == e.VK_DOWN )
{
y[ieh]++;
}
else if( e.getKeyCode() == e.VK_RIGHT )
{
x[ieh]++;
}
else if( e.getKeyCode() == e.VK_LEFT )
{
x[ieh]--;
}
repaint();
}
public void adjustmentValueChanged(AdjustmentEvent e){
if((e.getSource() == rot)||(e.getSource() == gruen)||(e.getSource() == blau))
{
r = rot.getValue();
g = gruen.getValue();
b = blau.getValue();
repaint();
}
}
Image buffer;
Graphics2D gbuffer;
public void paint(Graphics graph)
{
if (buffer==null)
{
buffer = createImage(500,500);
gbuffer = (Graphics2D)buffer.getGraphics();
}
gbuffer.clearRect(0,0,this.getSize().width,this.getSize().height);
gbuffer.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
//Style von Scrollbar und Buttons
change.setBounds(120,470,60,20);
rot.setBounds(30,450,80,10);
rot.setBackground(Color.red);
gruen.setBounds(30,465,80,10);
gruen.setBackground(Color.green);
blau.setBounds(30,480,80,10);
blau.setBackground(Color.blue);
//Verlauf für den Hintergrund
GradientPaint verlauf = new GradientPaint(0,0,new Color(164,204,255),0,500,new Color(244,244,255));
gbuffer.setPaint(verlauf);
gbuffer.fillRect(0,0,500,500);
// Bedienkonsole
gbuffer.setColor(new Color(0,0,0,120));
gbuffer.fillOval(-370,420,800,400);
gbuffer.setColor(Color.BLACK);
gbuffer.drawOval(-370,420,800,399);
gbuffer.setColor(Color.white);
gbuffer.drawString("Setze die Farbe.",30,445);
//Ufofarben
Color[] ufocolor = {new Color(r,g,b),new Color(g,b,r)};
//Ufo 1 mit position-x, position-y und farbe
ufo ufo1 = new ufo(x[0],y[0],ufocolor[0]);
ufo1.zeichnedasufo(gbuffer);
//Ufo 2 mit position-x, position-y und farbe
ufo ufo2 = new ufo(x[1],y[1],ufocolor[1]);
ufo2.zeichnedasufo(gbuffer);
graph.drawImage(buffer,0,0,this);
}
//Überschreiben von update
public void update(Graphics graph)
{
paint(graph);
}
}
Wenn ich den code nun ausführe, klappt alles, nur Meldet mir Netbeans das im Run-Fenster:
Code:
run-applet:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pData
at sun.awt.windows.Win32SurfaceData.initOps(Native Method)
at sun.awt.windows.Win32SurfaceData.<init>(Win32SurfaceData.java:448)
at sun.awt.windows.Win32SurfaceData.createData(Win32SurfaceData.java:316)
at sun.awt.Win32GraphicsConfig.createSurfaceData(Win32GraphicsConfig.java:357)
at sun.awt.windows.WComponentPeer.replaceSurfaceData(WComponentPeer.java:332)
at sun.awt.windows.WComponentPeer.replaceSurfaceData(WComponentPeer.java:313)
at sun.awt.windows.WComponentPeer$2.run(WComponentPeer.java:353)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
BUILD SUCCESSFUL (total time: 20 seconds)
Danke schon mal,
Gentle