// I want to place a panel which contains two canvases (a red one and
a blue one) on screen,
// along with two buttons. When a button is pressed the appropriate
message should be
// printed in the canvas. The code compiles okay, but I get a
run-time NullPointerExce ption.
// I don't understand why - could anyone please explain the problem
and suggest a solution?
// Thanks very much for any help,
// Gerard
import java.awt.*;
import java.applet.App let;
import java.awt.event. *;
class TypeOneApplet extends Applet implements ActionListener{
public final int CLEAR = 1;
public final int DULL = 2;
Button b1, b2;
Panel pan;
P p;
int theAction = 1;
public void actionPerformed ( ActionEvent e){
if( e.getSource() == b1)
theAction = CLEAR;
else
theAction = DULL;
}
void methodOne(){ System.out.prin tln(" method One"); }
void methodTwo(){ System.out.prin tln(" method Two"); }
}
public class TypeTwoApplet extends TypeOneApplet {
public void init(){
b1 = new Button("clear") ;
b2 = new Button("dull");
b1.addActionLis tener(this);
b2.addActionLis tener(this);
this.add( b1);
this.add( b2);
pan = new Panel();
p = new P( this);
pan.add( p);
this.add( pan);
System.out.prin tln("exit init");
}
void methodTwo(){ System.out.prin tln(" method Two B"); }
}
class M extends Canvas implements MouseListener{
TypeOneApplet toa;
String message;
public M(){}
public M( TypeOneApplet t){
toa = t;
message = "ready";
}
public void mousePressed( MouseEvent evt){
if( toa.theAction == toa.CLEAR)
message = "clear";
else
message = "dull";
repaint();
}
public void mouseClicked( MouseEvent e) {}
public void mouseEntered( MouseEvent e) {}
public void mouseExited( MouseEvent e) {}
public void mouseReleased( MouseEvent e) {}
public void paint( Graphics g){
setBackground( Color.red);
setForeground( Color.black);
g.drawString( message, 5, 5);
}
}
class M2 extends M{
TypeTwoApplet atoa;
public M2( TypeTwoApplet t){
atoa = t;
}
public void mousePressed( MouseEvent evt){
if( atoa.theAction == toa.CLEAR)
message = "clear 2";
else
message = "dull 2";
repaint();
}
public void paint( Graphics g){
setBackground( Color.blue);
setForeground( Color.black);
g.drawString( message, 5, 5);
}
}
class P extends Panel{
M [] m;
public P( TypeTwoApplet t){
m[0] = new M(t);
m[1] = new M2(t);
add( m[0]);
add( m[1]);
}
}
a blue one) on screen,
// along with two buttons. When a button is pressed the appropriate
message should be
// printed in the canvas. The code compiles okay, but I get a
run-time NullPointerExce ption.
// I don't understand why - could anyone please explain the problem
and suggest a solution?
// Thanks very much for any help,
// Gerard
import java.awt.*;
import java.applet.App let;
import java.awt.event. *;
class TypeOneApplet extends Applet implements ActionListener{
public final int CLEAR = 1;
public final int DULL = 2;
Button b1, b2;
Panel pan;
P p;
int theAction = 1;
public void actionPerformed ( ActionEvent e){
if( e.getSource() == b1)
theAction = CLEAR;
else
theAction = DULL;
}
void methodOne(){ System.out.prin tln(" method One"); }
void methodTwo(){ System.out.prin tln(" method Two"); }
}
public class TypeTwoApplet extends TypeOneApplet {
public void init(){
b1 = new Button("clear") ;
b2 = new Button("dull");
b1.addActionLis tener(this);
b2.addActionLis tener(this);
this.add( b1);
this.add( b2);
pan = new Panel();
p = new P( this);
pan.add( p);
this.add( pan);
System.out.prin tln("exit init");
}
void methodTwo(){ System.out.prin tln(" method Two B"); }
}
class M extends Canvas implements MouseListener{
TypeOneApplet toa;
String message;
public M(){}
public M( TypeOneApplet t){
toa = t;
message = "ready";
}
public void mousePressed( MouseEvent evt){
if( toa.theAction == toa.CLEAR)
message = "clear";
else
message = "dull";
repaint();
}
public void mouseClicked( MouseEvent e) {}
public void mouseEntered( MouseEvent e) {}
public void mouseExited( MouseEvent e) {}
public void mouseReleased( MouseEvent e) {}
public void paint( Graphics g){
setBackground( Color.red);
setForeground( Color.black);
g.drawString( message, 5, 5);
}
}
class M2 extends M{
TypeTwoApplet atoa;
public M2( TypeTwoApplet t){
atoa = t;
}
public void mousePressed( MouseEvent evt){
if( atoa.theAction == toa.CLEAR)
message = "clear 2";
else
message = "dull 2";
repaint();
}
public void paint( Graphics g){
setBackground( Color.blue);
setForeground( Color.black);
g.drawString( message, 5, 5);
}
}
class P extends Panel{
M [] m;
public P( TypeTwoApplet t){
m[0] = new M(t);
m[1] = new M2(t);
add( m[0]);
add( m[1]);
}
}
Comment