Hallo liebe Forumler,
nachdem ich jetzt mal ein wenig das mächtige Internet befragt habe und nur partiell schlauer geworden bin, würde es mich interessieren, ob hier jemand Tips für mich hat.
Problem wie folgt:
Ich bin noch ein Anfänger, was GUIs angeht und benutze Eclipse mit WindowBuilder-PlugIn.
Mein Plan war es das Game of Life zu implementieren. Und zwar in einer dynamischen Variante.
Der User soll vieles selbst angeben können, sodass ein etwas aufwendigeres Interface nötig wurde.
Unter anderem soll die Grid-Größe dynamisch sein.
Meine Idee war es also ein JPanel einzusetzen, dazu das GridLayout zu verwenden und dieses in Abhängigkeit der Usereingabe mit weiteren JPanels zu bestücken, damit ich in vollem Umfang die Farben bearbeiten kann usw.; darunter organisiere ich mein Frame mit MiGLayout . Wenn ich jedoch zur Laufzeit die Spielfeldgröße für einen neuen Durchgang verändere dauert das ab einem bestimmten Punkt (ca. 160x160) ziemlich lange; sprich mehrere Sekunden, was bei meinem Rechner nicht der Fall sein dürfte. Conclusio: ich habe schlecht programmiert bzw. einen schlechten Ansatz gewählt. Es folgt das entsprechende Code-Segment.
Ich denke die Variablennamen sind so sprechend gewählt, dass ich diese nicht gesondert erklären muss.
Cell ist ein eigener Datentyp, der ein paar Daten speichert, die für meine Rechnungen und Features von Bedeutung sein sollen.
Habt ihr Ideen, wie das performanter zu gestalten wäre? Evtl. mit weniger Objekt-Instanzierungen? Eine weitere Idee war es, nicht jedem Feld einen Listener hinzuzufügen, sondern nur der darunterliegenden Komponente (also dem JPanel) und sich dann für das Markieren von Feldern zu Spielbeginn die Source des Events zu besorgen, was mir aber immer nur das darunterliegende JPanel liefert.
Ich hoffe der Codeschnipsel ist ausreichend um etwas dazu zu sagen; jedenfalls wäre ich dankbar für Tips!
Beste Grüße,
Wolf
nachdem ich jetzt mal ein wenig das mächtige Internet befragt habe und nur partiell schlauer geworden bin, würde es mich interessieren, ob hier jemand Tips für mich hat.
Problem wie folgt:
Ich bin noch ein Anfänger, was GUIs angeht und benutze Eclipse mit WindowBuilder-PlugIn.
Mein Plan war es das Game of Life zu implementieren. Und zwar in einer dynamischen Variante.
Der User soll vieles selbst angeben können, sodass ein etwas aufwendigeres Interface nötig wurde.
Unter anderem soll die Grid-Größe dynamisch sein.
Meine Idee war es also ein JPanel einzusetzen, dazu das GridLayout zu verwenden und dieses in Abhängigkeit der Usereingabe mit weiteren JPanels zu bestücken, damit ich in vollem Umfang die Farben bearbeiten kann usw.; darunter organisiere ich mein Frame mit MiGLayout . Wenn ich jedoch zur Laufzeit die Spielfeldgröße für einen neuen Durchgang verändere dauert das ab einem bestimmten Punkt (ca. 160x160) ziemlich lange; sprich mehrere Sekunden, was bei meinem Rechner nicht der Fall sein dürfte. Conclusio: ich habe schlecht programmiert bzw. einen schlechten Ansatz gewählt. Es folgt das entsprechende Code-Segment.
Java:
protected void setField(int Zeilen, int Spalten){ //ZeilenSpaltendimension, Vorbereitung der Arrays und Aktualisieren der Zeichnung, Listener hinzufügen
Zeilenanzahl = Zeilen;
Spaltenanzahl = Spalten;
this.removeAll();
this.validate();
setLayout(new GridLayout(Zeilen,Spalten,1,1));
DarstellungsArray = new JPanel[Zeilen][Spalten];
ZellenArray = new Cell[Zeilen][Spalten];
for(int i=0;i<=Zeilen-1;i++){
for(int j=0;j<=Spalten-1;j++){
DarstellungsArray[i][j] = new JPanel();
DarstellungsArray[i][j].addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent event){
if(clickable==true){
((JPanel) event.getSource()).setBackground(Color.BLUE);
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
});
this.add(DarstellungsArray[i][j]);
ZellenArray[i][j] = new Cell();
}
}
this.validate();
this.repaint();
}
Ich denke die Variablennamen sind so sprechend gewählt, dass ich diese nicht gesondert erklären muss.
Cell ist ein eigener Datentyp, der ein paar Daten speichert, die für meine Rechnungen und Features von Bedeutung sein sollen.
Habt ihr Ideen, wie das performanter zu gestalten wäre? Evtl. mit weniger Objekt-Instanzierungen? Eine weitere Idee war es, nicht jedem Feld einen Listener hinzuzufügen, sondern nur der darunterliegenden Komponente (also dem JPanel) und sich dann für das Markieren von Feldern zu Spielbeginn die Source des Events zu besorgen, was mir aber immer nur das darunterliegende JPanel liefert.
Ich hoffe der Codeschnipsel ist ausreichend um etwas dazu zu sagen; jedenfalls wäre ich dankbar für Tips!
Beste Grüße,
Wolf