Mehrere JPanels in ein JFrame

Status
Nicht offen für weitere Antworten.

al3x

Mitglied
HI,
ich programmiere derzeit 4gewinnt habe mir zur optischen Darstellung folgendes überlegt. Ich habe ein JFrame und bis zu 10(je nachdem wieviele spalten) JPanels. und in diesen JPanels fliegen bilder(in form von steinen) herunter, nun habe ich bei der initialisierung der JPanels ein Problem:

[HIGHLIGHT="Java"]public class Spielfeld extends JFrame implements ActionListener, KeyListener
{
Spalten_Panels sp[];

//----------Konstruktor----------
public Spielfeld()
{
//super("...gegen....");
init();
}


void init()
{
this.setTitle("... gegen ...");
this.setBounds(getX(), getY(), 600, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
this.setResizable(true);


//Dropbuttons
for (int s = 0; s < spalten; s++)
{
btnDrop = new JButton("<html>&nbsp;|<br> V</html>");
btnDrop.setBounds(s*60+s*2+10, 10, 60, 60);
btnDrop.addActionListener(this);
this.add(btnDrop);
}

//Weitere Buttons

//Spalten_Panels
for (int s = 0; s < spalten; s++)
{
sp = new Spalten_Panels(s, spalten, zeilen);
//spielFeldPanel.setBounds(s*62+10, 75, 60, 60*zeilen+zeilen*2);
//spielFeldPanel.setBackground(Color.WHITE);
//spielFeldPanel.addMouseListener(new PanelListener());
this.add(sp);
}
}
}

class Spalten_Panels extends JPanel
{
public Spalten_Panels(int s, int spalten, int zeilen)
{
this.setBounds(s*62+10, 75, 60, 60*zeilen+zeilen*2);
this.setBackground(Color.WHITE);
this.setVisible(true);
}
}[/HIGHLIGHT]

Bei der Ausführung kommt aber nur:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Frames.Spielfeld.init(Spielfeld.java:84) <-- ist: sp = new Spalten_Panels(s, spalten, zeilen);
at Frames.Spielfeld.<init>(Spielfeld.java:51)


Was mache ich falsch? Oder die andere Frage wäre auch, geht das überhaupt mit einem Array oder gibt es ingesamt eine bessere Lösung?

Vielen Dank im voraus
 
Zuletzt bearbeitet von einem Moderator:
[HIGHLIGHT="Java"]//Spalten_Panels
for (int s = 0; s < spalten; s++)
{
sp = new Spalten_Panels(s, spalten, zeilen);[/HIGHLIGHT]


sp ist hier null!
es fehlt:
Spalten_Panels[] sp = new Spalten_Panels[spalten]
 
doppelt aber dafür mit interessanter Anmerkung:

bei
> btnDrop = new JButton("<html>&nbsp;|<br> V</html>");
kommt vorher nicht die Exception?

dann hast du bestimmt irgendwo
btnDrop = new JButton[spalten];
stehen,

deine sp enthält dagegen null, du musst erst ein Array erzeugen und darin speichern 😉

---------

> es fehlt:
> Spalten_Panels[] sp = new Spalten_Panels[spalten]

bloß nicht eine lokale Variable anlegen und das Klassenattribut null lassen,
(obwohl es vielleicht nie wieder benutz wird)

nur
sp = new Spalten_Panels[spalten];
schreiben

oder das Array wirklich nur lokal im Konstruktor definieren, dann das Klassenattribut weg
 
Hey,

natürlich^^, totaler Leichtsinnsfehler. Jetzt gehts natürlich.

@Hadernlump das mit dem GridLayout werde ichm ir mal anschauen.

Die einzigste Frage wäre noch, ob das so allgemein überhaupt Sinn macht? Ich möchte das Ganze animieren, heißt ich möchte die Bilder(Steine) wie in echt runterfallen lassen und derartiges. Die Umsetzung ist nicht das Problem, mache aber erst seit ein paar Monaten mit Swing/AWT rum und kenne die Möglichkeiten noch nicht so, was bei mir auch allgemein immer das Problem ist😉

Gruß Alex
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben