Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Aufgabe_4 extends JFrame {
private final int M = 5, N = 6; // Anzahl der Zeilen bzw. Spalten
private final int w = 50; // Breite der Schaltflächen fuer die LEDs
private LEDButton[][] leds; // Matrix mit den LEDs (Schaltflaechen)
private JPanel ledPanel = new JPanel(); // Panel mit LED Buttons
private JPanel controlPanel = new JPanel(); // Panel mit Reset Button
private int[][] initConfig; // speichert LEDD Positionen
// in F
//
public Aufgabe_4(){
super("Licht aus!!!");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.ledPanel.setPreferredSize(new Dimension(N*w,M*w));
this.initLEDPanel();
this.getContentPane().add(ledPanel,BorderLayout.CENTER);
this.initControlPanel();
this.getContentPane().add(controlPanel,BorderLayout.NORTH);
this.pack();
}
// *** Aufgabenteil (a) ***
private void initLEDPanel(){
ledPanel.setLayout(new GridLayout(M,N));
leds= new LEDButton[M][N];
for (int i=0; i<leds.length;i++){
for (int j=0; j<leds[i].length;j++){
leds[i][j]=new LEDButton(i,j);
ledPanel.add(leds[i][j]);
}
randomInit();
}
//TODO
}
private void randomInit(){
int k=NumberGenerator.randomInt(3,7);
initConfig= new int[k][2];
for ( int i=0; i<initConfig.length;i++){
int temp2=(int)(Math.random()*k);
int temp3=(int)(Math.random()*2);
leds[temp2][temp3].einschalten();
initConfig[temp2][temp3]=1;
}
// TODO
}
private void resetLEDs(){
for (int i=0; i<leds.length;i++){
for (int j=0; j<leds[i].length;j++){
leds[i][j].ausschalten();
}
}
for (int i=0; i<initConfig.length;i++){
for (int j=0; j<initConfig[i].length;j++){
if(initConfig[i][j]==1){
leds[i][j].einschalten();
}
}
}
// TODO
}
public void istFertig(){
boolean temp=false;
for (int i=0; i<leds.length;i++){
for (int j=0; j<leds[i].length;j++){
if(leds[i][j].istEingeschaltet()==false){
temp=true;
}else{
temp=false;
break;
}
}
}
if(temp==true){
int answer=JOptionPane.showConfirmDialog(Aufgabe_4.this,"zu ende");
}
// TODO
}
/* Aufgabenteil (b) */
public void initControlPanel(){
// TODO
}
// *** Aufgabenteil (c) ***
// TODO
public static void main(String[] args){
Aufgabe_4 a4 = new Aufgabe_4();
a4.setVisible(true);
}
}
und
Java:
import javax.swing.JButton;
import java.awt.Color;
public class LEDButton extends JButton {
private int zeile,spalte; // Position der LED im Gitter
private boolean istEingeschaltet = false;
private final Color EIN = Color.yellow;
private final Color AUS = Color.black;
public LEDButton(int zeile, int spalte){
this.zeile = zeile;
this.spalte = spalte;
this.setBackground(AUS);
}
public void umschalten(){
if (istEingeschaltet){
this.ausschalten();
} else {
this.einschalten();
}
}
public void ausschalten(){
this.istEingeschaltet = false;
this.setBackground(AUS);
this.repaint();
}
public void einschalten(){
this.istEingeschaltet = true;
this.setBackground(EIN);
this.repaint();
}
public boolean istEingeschaltet() {
return this.istEingeschaltet;
}
public int getZeile(){
return this.zeile;
}
public int getSpalte(){
return this.spalte;
}
}
Der Kompiler sagt:
Exception in thread "main" java.lang.NullpointerException: cannot invoke "LEDButton.einschalten()" because "this.leds[<local3>][<local4>]" is null
at Aufgabe_4.randomInit(Aufgabe_4.java:53)
at Aufgabe_4.initLedPanel(Aufgabe_4.java:39(
at Aufgabe_4.<init>(Aufgabe_4.java:22)
at Aufgabe_4.main(Aufgabe_4.java:115)
Aber wo ist der Fehler?